Pythonã§ããžã¿ã«ãªãŒãã£ãªã®äžçãæ¢æ±ããŸããããé³é¿åæãåæãLibrosaãSciPyãªã©ã®äž»èŠã©ã€ãã©ãªãéçºè ãæå¥œå®¶åãã®ã³ãŒãäŸãç¶²çŸ ã
Pythonã«ããé³å£°åŠçïŒé³é¿åæãšåæã®æ·±æã
é³ã¯ã人éã®çµéšã®æ ¹æºçãªéšåã§ããç§ãã¡ãæãã鳿¥œãããèªèãã声ããããŠç§ãã¡ã®ç°å¢ã®ç°å¢é³ãŸã§ããªãŒãã£ãªããŒã¿ã¯è±ãã§ãè€éã§ããããŠæ·±ãæå³ã®ãããã®ã§ããããžã¿ã«æä»£ã«ãããŠããã®ããŒã¿ãæäœãçè§£ããèœåã¯ããšã³ã¿ãŒãã€ã³ã¡ã³ãã人工ç¥èœãç§åŠç ç©¶ãšãã£ã倿§ãªåéã§éèŠãªã¹ãã«ãšãªã£ãŠããŸããéçºè ãããŒã¿ãµã€ãšã³ãã£ã¹ãã«ãšã£ãŠãPythonã¯ãã®ã¿ã¹ã¯ã®ããã®åŒ·åãªãã©ãããã©ãŒã ãšããŠæµ®äžããŠãããããžã¿ã«ä¿¡å·åŠçïŒDSPïŒã®ããã®å ç¢ãªã©ã€ãã©ãªã®ãšã³ã·ã¹ãã ãæäŸããŠããŸãã
é³å£°åŠçã®äžå¿ã«ã¯ãè£å®çãª2ã€ã®åŠååéããããŸãïŒé³é¿åæãšé³å£°åæã§ãããããã¯ããžã¿ã«ãªãŒãã£ãªã®é°ãšéœã§ãïŒ
- åæã¯ãåè§£ã®ããã»ã¹ã§ããæ¢åã®ãªãŒãã£ãªä¿¡å·ãåã蟌ã¿ãæå³ã®ããæ å ±ãæœåºããããã«åè§£ããããšãå«ã¿ãŸããããã¯ãããã®é³ã¯äœã§ã§ããŠããã®ãïŒããšããåãã«çããŸãã
- åæã¯ãæ§ç¯ã®ããã»ã¹ã§ããæ°åŠçã¢ãã«ãšã¢ã«ãŽãªãºã ã䜿çšããŠããŒããããªãŒãã£ãªä¿¡å·ãäœæããããšãå«ã¿ãŸããããã¯ãããã®é³ãã©ã®ããã«äœæã§ãããïŒããšããåãã«çããŸãã
ãã®å æ¬çãªã¬ã€ãã¯ãäž¡æ¹ã®äžçãå·¡ãæ ãžãšããªããèªããŸããçè«çåºç€ãæ¢æ±ããå¿ é ã®PythonããŒã«ã玹ä»ãããããŠããªããèªåã§å®è¡ãé©å¿ãããããšãã§ããå®è·µçãªã³ãŒãäŸãæ©ãã§ãããŸãããªãŒãã£ãªç¹åŸŽéãåæãããããŒã¿ãµã€ãšã³ãã£ã¹ããã¢ã«ãŽãªãºã äœæ²ã«èå³ã®ãããã¥ãŒãžã·ã£ã³ããããã¯æ¬¡ã®åªãããªãŒãã£ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããéçºè ã§ãã£ãŠãããã®èšäºã¯ããªããå§ããããã«å¿ èŠãªåºç€ãæäŸããŸãã
ããŒã1ïŒåè§£ã®èžè¡ïŒPythonã«ããé³é¿åæ
é³é¿åæã¯æ¢åµã®ãããªãã®ã§ããããªãã¯èšŒæ åâãªãŒãã£ãªãã¡ã€ã«âãäžãããããã®ç§å¯ãæããã«ããããã«ããªãã®ããŒã«ã䜿çšããä»äºããããŸããã©ã®é³ç¬ŠãæŒå¥ãããã®ãïŒèª°ã話ããŠããã®ãïŒã©ã®ãããªç°å¢ã§é²é³ãããã®ãïŒãããã¯ãé³é¿åæãç§ãã¡ã«çããããŠããã質åã§ãã
ããžã¿ã«ãªãŒãã£ãªã®ã³ã¢ã³ã³ã»ãã
é³ãåæã§ããããã«ãªãåã«ãã³ã³ãã¥ãŒã¿ã§ã©ã®ããã«è¡šçŸãããããçè§£ããå¿ èŠããããŸããã¢ããã°ã®é³æ³¢ã¯é£ç¶çãªä¿¡å·ã§ãããããããžã¿ã«ã§ä¿åããã«ã¯ããµã³ããªã³ã°ãšåŒã°ããããã»ã¹ãéããŠå€æããå¿ èŠããããŸãã
- ãµã³ããªã³ã°ã¬ãŒãïŒããã¯ããªãŒãã£ãªä¿¡å·ã®ãµã³ãã«ã®æ°ïŒã¹ãããã·ã§ããïŒã1ç§ãããã«ååŸãããã®ã§ãããã«ãïŒHzïŒã§æž¬å®ãããŸãã鳿¥œã®äžè¬çãªãµã³ããªã³ã°ã¬ãŒãã¯44,100 HzïŒ44.1 kHzïŒã§ãããããã¯é³ã®æ¯å¹ ã®44,100ã®ã¹ãããã·ã§ãããæ¯ç§ååŸãããããšãæå³ããŸãã
- ãããæ·±åºŠïŒããã¯åãµã³ãã«ã®è§£ååºŠãæ±ºå®ããŸããããé«ããããæ·±åºŠã¯ããã倧ããªãã€ãããã¯ã¬ã³ãžïŒæãéããªé³ãšæã倧ããªé³ã®å·®ïŒãå¯èœã«ããŸãã16ãããæ·±åºŠã¯CDã®æšæºã§ãã
ãã®ããã»ã¹ã®çµæã¯æ°å€ã®ã·ãŒã±ã³ã¹ã§ããããããæ³¢åœ¢ãšããŠè¡šãããšãã§ããŸãã
æ³¢åœ¢ïŒæ¯å¹ ãšæé
ãªãŒãã£ãªã®æãåºæ¬çãªè¡šçŸã¯æ³¢åœ¢ã§ããããã¯æ¯å¹ ïŒé³éïŒå¯Ÿæéã®2次å ããããã§ããæ³¢åœ¢ãèŠãããšã§ããªãŒãã£ãªã®ãã€ããã¯ã¹ã®ãããŸããªæèŠãåŸãããšãã§ããŸããããã®é³è²ã«é¢ããå€ãã®æ å ±ã¯åŸãããŸããã
ã¹ãã¯ãã«ïŒåšæ³¢æ°ãšããã
é³ã®é³è²ãçè§£ããã«ã¯ãæéé åïŒæ³¢åœ¢ïŒããåšæ³¢æ°é åã«ç§»åããå¿ èŠããããŸããããã¯ãé«éããŒãªãšå€æïŒFFTïŒãšåŒã°ããã¢ã«ãŽãªãºã ã䜿çšããŠéæãããŸããFFTã¯ã波圢ã®äžéšããç¹å®ã®åšæ³¢æ°ãšæ¯å¹ ãæã€åã ã®ãµã€ã³æ³¢ã«åè§£ããŸããçµæã¯ã¹ãã¯ãã«ãã€ãŸãæ¯å¹ å¯Ÿåšæ³¢æ°ã®ããããã§ãããã®ããããã¯ãã©ã®åšæ³¢æ°ïŒãŸãã¯ãããïŒãé³ã«ååšããããããã©ãã ã匷ããã瀺ããŸãã
é³è²ïŒãé³ã®è²åœ©ã
ãªããã¢ããšã®ã¿ãŒãåãé³ïŒåãåºé³åšæ³¢æ°ïŒãæŒå¥ããŠãã so different ã«èãããã®ã§ããããïŒãã®çãã¯é³è²ïŒçºé³ïŒâtam-berâïŒã§ããé³è²ã¯ãåºé³åšæ³¢æ°ã®æŽæ°åã®è¿œå åšæ³¢æ°ã§ããåé³ãŸãã¯äžé³ã®ååšãšåŒ·åºŠã«ãã£ãŠæ±ºãŸããŸãããããã®åé³ã®ãŠããŒã¯ãªçµã¿åããããæ¥œåšã«ãã®ç¹åŸŽçãªé³è²ãäžããŠããŸãã
é³é¿åæã®ããã®å¿ é Pythonã©ã€ãã©ãª
Pythonã®åŒ·ã¿ã¯ããã®åºç¯ãªãµãŒãããŒãã£ã©ã€ãã©ãªã®ã³ã¬ã¯ã·ã§ã³ã«ãããŸããé³é¿åæã§ã¯ãããã€ãã®ã©ã€ãã©ãªãéç«ã£ãŠããŸãã
- LibrosaïŒããã¯Pythonã«ããããªãŒãã£ãªããã³é³æ¥œåæã®äž»èŠã©ã€ãã©ãªã§ãããªãŒãã£ãªã®ããŒããå¯èŠåããã³ããããããã¯ããããã¯è¡šçŸãªã©ã®å¹ åºãé«ã¬ãã«ç¹åŸŽéã®æœåºã®ããã®åºç¯ãªããŒã«ããããæäŸããŸãã
- SciPyïŒç§åŠPythonã¹ã¿ãã¯ã®ã³ã¢ã©ã€ãã©ãªã§ããSciPyã«ã¯ã匷åãª`signal`ã¢ãžã¥ãŒã«ãå«ãŸããŠããŸããããã¯ããã£ã«ã¿ãªã³ã°ãããŒãªãšå€æãã¹ãã¯ããã°ã©ã ã®æäœãªã©ãäœã¬ãã«ã®DSPã¿ã¹ã¯ã«åªããŠããŸãããŸãã`.wav`ãã¡ã€ã«ãç°¡åã«èªã¿æžãããæ¹æ³ãæäŸããŸãã
- pydubïŒé«ã¬ãã«ã§ç°¡åãªæäœã«ã¯ã`pydub`ãæé©ã§ããéåžžã«çŽæçãªAPIã§ããªãŒãã£ãªã®ã¹ã©ã€ã¹ãé£çµããªãŒããŒã¬ã€ãããã³ç°¡åãªãšãã§ã¯ãã®é©çšãå¯èœã«ããŸããååŠçã¿ã¹ã¯ã«æé©ã§ãã
- NumPy & MatplotlibïŒãªãŒãã£ãªåºæã§ã¯ãããŸãããããããã¯äžå¯æ¬ ã§ããNumPyã¯ããªãŒãã£ãªããŒã¿ãä¿æããããã®åºæ¬çãªããŒã¿æ§é ïŒN次å é åïŒãæäŸããMatplotlibã¯ãããããšå¯èŠåã®æšæºã§ãã
å®è·µçãªåæïŒæ³¢åœ¢ããæŽå¯ãž
å®éã«æãåãããŠã¿ãŸãããããŸããå¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ããïŒ
pip install librosa matplotlib numpy scipy
äœæ¥çšã®ãªãŒãã£ãªãã¡ã€ã«ãå¿ èŠã§ãããããã®äŸã§ã¯ã`audio_sample.wav`ãšããååã®ãã¡ã€ã«ããããšä»®å®ããŸãã
ãªãŒãã£ãªã®ããŒããšå¯èŠå
æåã®æé ã¯ãåžžã«ãªãŒãã£ãªããŒã¿ãNumPyé åã«ããŒãããããšã§ããLibrosaã¯ãããéåžžã«ç°¡åã«ããŸãã
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# ãªãŒãã£ãªãã¡ã€ã«ã®ãã¹ãå®çŸ©
file_path = 'audio_sample.wav'
# ãªãŒãã£ãªãã¡ã€ã«ãããŒã
# y ã¯ãªãŒãã£ãªã¿ã€ã ã·ãªãŒãºïŒNumPyé
åïŒ
# sr ã¯ãµã³ããªã³ã°ã¬ãŒã
y, sr = librosa.load(file_path)
# 波圢ããããã
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr)
plt.title('Audio Waveform')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()
ãã®ã³ãŒãã¯ãªãŒãã£ãªãã¡ã€ã«ãããŒããããã®æ³¢åœ¢ã衚瀺ããŸããé²é³ã®ãã倧ããããéããªéšåãæéãšãšãã«ããã«ç¢ºèªã§ããŸãã
åšæ³¢æ°ã³ã³ãã³ãã®è§£æïŒã¹ãã¯ããã°ã©ã
波圢ã¯äŸ¿å©ã§ãããã¹ãã¯ããã°ã©ã ã¯ã¯ããã«è±ããªãã¥ãŒãæäŸããŸããã¹ãã¯ããã°ã©ã ã¯ãä¿¡å·ã®ã¹ãã¯ãã«ãæéãšãšãã«å€åããæ§åãèŠèŠåããŸããæ°Žå¹³è»žã¯æéãåçŽè»žã¯åšæ³¢æ°ããããŠè²ã¯ç¹å®ã®æéã«ãããç¹å®ã®åšæ³¢æ°ã®æ¯å¹ ã衚ããŸãã
# çæéããŒãªãšå€æïŒSTFTïŒãèšç®
D = librosa.stft(y)
# æ¯å¹
ããã·ãã«ïŒããçŽæçãªã¹ã±ãŒã«ïŒã«å€æ
DB = librosa.amplitude_to_db(np.abs(D), ref=np.max)
# ã¹ãã¯ããã°ã©ã ããããã
plt.figure(figsize=(14, 5))
librosa.display.specshow(DB, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-Frequency Power Spectrogram')
plt.show()
ã¹ãã¯ããã°ã©ã ã䜿çšãããšã鳿¥œã®é³ç¬Šã人ã®ã¹ããŒãã®ãã©ã«ãã³ãããããã¯æ©æ¢°ã®ãã ã®ç¹åŸŽçãªåšæ³¢æ°ã·ã°ããã£ãæåéãèŠãããšãã§ããŸãã
æå³ã®ããç¹åŸŽéã®æœåº
å€ãã®å Žåãè€éãªãªãŒãã£ãªä¿¡å·ãããã®äž»èŠãªç¹æ§ã説æããå°æ°ã®æ°å€ãŸãã¯ãã¯ãã«ã«ãŸã§çµã蟌ã¿ãããšèããŸãããããã¯ç¹åŸŽéãšåŒã°ãããªãŒãã£ãªã®æ©æ¢°åŠç¿ã¢ãã«ã®çåœç·ã§ãã
ãŒã亀差çïŒZCRïŒïŒããã¯ãä¿¡å·ã笊å·ïŒæ£ããè² ãŸãã¯ãã®éïŒãå€åãããã¬ãŒãã§ããé«ãZCRã¯ããã€ãºã®å€ããŸãã¯ããŒã«ãã·ããªé³ïŒã·ã³ãã«ãé黿°ã®ãããªïŒã瀺åããããšããããããŸãããäœãZCRã¯ãããã«ã§ã¡ããã£ãã¯ãªé³ïŒãã«ãŒããæãããæ¯é³ã®ãããªïŒã®å žåã§ãã
zcr = librosa.feature.zero_crossing_rate(y)
print(f"Average Zero-Crossing Rate: {np.mean(zcr)}")
ã¹ãã¯ãã«ã»ã³ããã€ãïŒãã®ç¹åŸŽéã¯ãã¹ãã¯ãã«ã®ã質éäžå¿ãã衚ããŸããããã¯ãé³ã®æããã®å°ºåºŠã§ããé«ãã¹ãã¯ãã«ã»ã³ããã€ãã¯ãããé«åšæ³¢ã³ã³ãã³ãïŒãã©ã³ãããã®ãããªïŒãæã€é³ã瀺ããŸãããäœããã®ã¯ããæãé³ïŒãã§ãã®ãããªïŒã瀺ããŸãã
spectral_centroids = librosa.feature.spectral_centroid(y=y, sr=sr)[0]
# æéçµéã«äŒŽãã¹ãã¯ãã«ã»ã³ããã€ãã®ãããã
frames = range(len(spectral_centroids))
t = librosa.frames_to_time(frames, sr=sr)
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr, alpha=0.4)
plt.plot(t, spectral_centroids, color='r') # ã¹ãã¯ãã«ã»ã³ããã€ããèµ€ã§è¡šç€º
plt.title('Spectral Centroid')
plt.show()
ã¡ã«åšæ³¢æ°ã±ãã¹ãã©ã ä¿æ°ïŒMFCCïŒïŒããã¯ãç¹ã«é³å£°èªèã鳿¥œãžã£ã³ã«åé¡ã«ãããŠããªãŒãã£ãªåé¡ã¿ã¹ã¯ã«ãšã£ãŠééããªãæãéèŠãªç¹åŸŽéã§ããMFCCã¯ãåšæ³¢æ°ã®éç·åœ¢ã¡ã«ã¹ã±ãŒã«äžã®å¯Ÿæ°ãã¯ãŒã¹ãã¯ãã«ã®ç·åœ¢ã³ãµã€ã³å€æã«åºã¥ãããé³ã®çæãã¯ãŒã¹ãã¯ãã«ã®ã³ã³ãã¯ããªè¡šçŸã§ããããã¯å€ãã®èšèã§ãããéèŠãªã¢ã€ãã¢ã¯ããããã人éã®èŽèŠç¥èŠãã¢ãã«åããããã«èšèšãããŠããã人éã®ãããªçè§£ãæãŸããã¿ã¹ã¯ã«éåžžã«å¹æçã§ãããšããããšã§ãã
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
# MFCCã®å¯èŠå
plt.figure(figsize=(14, 5))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar()
plt.title('MFCCs')
plt.show()
ããããšãã³ãã®æ€åº
Librosaã¯ã鳿¥œåºæã®åæã®ããã®é«ã¬ãã«é¢æ°ãæäŸããŸãã
ãã³ããšããŒã远跡ïŒã°ããŒãã«ãã³ãïŒBPMïŒãç°¡åã«æšå®ãããªãŒãã£ãªå ã®ããŒãã®äœçœ®ãç¹å®ã§ããŸãã
# ãã³ããæšå®ããããŒããã¬ãŒã ãèŠã€ãã
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print(f'Estimated tempo: {tempo:.2f} beats per minute')
# ããŒããã¬ãŒã ãæéã«å€æ
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
ããã¯æ°·å±±ã®äžè§ã«ãããŸãããLibrosaã¯ããªãºã ãããŒã¢ããŒãé³è²ã®åæã®ããã®æ°åã®ç¹åŸŽéãæäŸããŠããã鳿¥œæ å ±æ€çŽ¢ïŒMIRïŒã®ããã®éåžžã«åŒ·åãªããŒã«ãšãªã£ãŠããŸãã
ããŒã2ïŒåµé ã®æè¡ïŒPythonã«ããé³å£°åæ
åæãç©äºãåè§£ããããšã§ãããªããåæã¯ãŒãããæ§ç¯ããããšã§ããPythonã䜿ãã°ãæ°è¡ã®ã³ãŒãã ãã§ããã€ãŠååšããªãã£ãé³ãçæããããžã¿ã«è·äººã«ãªãããšãã§ããŸããäžå¿çãªèãæ¹ã¯ãåçãããšèšèšãã鳿³¢ãäœæããå€ã®NumPyé åãçæããããšã§ãã
åºæ¬çãªåææè¡
é³ãåæããæ¹æ³ã¯ãããããããããããã«ç¬èªã®ç¹æ§ããããŸããããã«ããã€ãã®åºæ¬çãªã¢ãããŒãã瀺ããŸãã
- å ç®åæïŒæãã·ã³ãã«ã§çŽæçãªæ¹æ³ãããŒãªãšã®å®çã«åºã¥ããä»»æã®è€éãªåšææ³¢åœ¢ã¯åçŽãªãµã€ã³æ³¢ïŒåé³ïŒã®åèšãšããŠè¡šçŸã§ãããšè¿°ã¹ãŠããŸããç°ãªãåšæ³¢æ°ãæ¯å¹ ãäœçžã®ãµã€ã³æ³¢ãå ç®ããããšã§ãä¿¡ããããªãã»ã©è±ãã§è€éãªé³è²ãæ§ç¯ã§ããŸãã
- æžç®åæïŒããã¯å ç®ã®å察ã§ããåé³è±ããªæ³¢åœ¢ïŒç©åœ¢æ³¢ãã®ãããæ³¢ãªã©ïŒããå§ããŠããã£ã«ã¿ã䜿çšããŠåšæ³¢æ°ãåãåã£ãããæžç®ãããããŸããããã¯ã»ãšãã©ã®ã¯ã©ã·ãã¯ãªã¢ããã°ã·ã³ã»ãµã€ã¶ãŒã®åºç€ã§ãã
- åšæ³¢æ°å€èª¿ïŒFMïŒåæïŒ1ã€ã®ãªã·ã¬ãŒã¿ïŒããã£ãªã¢ãïŒã®åšæ³¢æ°ãå¥ã®ãªã·ã¬ãŒã¿ïŒãã¢ãžã¥ã¬ãŒã¿ãïŒã®åºåã«ãã£ãŠå€èª¿ããããéåžžã«å¹ççã§åŒ·åãªæè¡ã§ããããã¯éåžžã«è€éã§ãã€ãããã¯ãªããã°ãã°éå±çãŸãã¯ãã«ã®ãããªé³ãäœæã§ããŸãã
é³å£°åæã®ããã®å¿ é Pythonã©ã€ãã©ãª
åæã®å Žåãç§ãã¡ã®ããŒã«ãããã¯ããã·ã³ãã«ã§ããããã®åã¯å£ããŸããã
- NumPyïŒããã絶察çãªäžå¿ã§ããNumPyã䜿çšããŠã鳿³¢ãè¡šãæ°å€ã®é åãäœæããã³æäœããŸãããã®æ°åŠé¢æ°ã¯ããµã€ã³æ³¢ãç©åœ¢æ³¢ãäžè§æ³¢ãªã©ã®æ³¢åœ¢ãçæããããã«äžå¯æ¬ ã§ãã
- SciPyïŒ`scipy.io.wavfile.write`颿°ã䜿çšããŠãNumPyé åãæšæºã®`.wav`ãªãŒãã£ãªãã¡ã€ã«ã«ä¿åããããããã¡ãã£ã¢ãã¬ãŒã€ãŒã§åçã§ããããã«ããŸãã
å®è·µçãªåæïŒã³ãŒãããé³ãåµã
é³ãäœãå§ããŸããããSciPyãšNumPyã®æºåãã§ããŠããããšã確èªããŠãã ããã
çŽé³ïŒãµã€ã³æ³¢ïŒã®çæ
äœæã§ããæãã·ã³ãã«ãªé³ã¯çŽé³ã§ãããã¯ç¹å®ã®åšæ³¢æ°ã®ãµã€ã³æ³¢ã§ãã
import numpy as np
from scipy.io.wavfile import write
# --- åæãã©ã¡ãŒã¿ ---
sr = 44100 # ãµã³ããªã³ã°ã¬ãŒã
duration = 3.0 # ç§
frequency = 440.0 # Hz (A4ããŒã)
# æéé
åãçæ
# ããã¯0ãã'duration'ãŸã§ã®æ°å€ã®ã·ãŒã±ã³ã¹ãäœæãã1ç§ããã'sr'ãã€ã³ããå«ã¿ãŸã
t = np.linspace(0., duration, int(sr * duration), endpoint=False)
# ãµã€ã³æ³¢ãçæ
# ãµã€ã³æ³¢ã®åŒã¯æ¬¡ã®ãšããã§ãïŒ amplitude * sin(2 * pi * frequency * time)
amplitude = np.iinfo(np.int16).max * 0.5 # æå€§16ãããæŽæ°å€ã®ååã䜿çš
data = amplitude * np.sin(2. * np.pi * frequency * t)
# 16ãããããŒã¿ã«å€æãã.wavãã¡ã€ã«ã«æžã蟌ã
write('sine_wave_440hz.wav', sr, data.astype(np.int16))
print("Generated 'sine_wave_440hz.wav' successfully.")
ãã®ã³ãŒããå®è¡ãããšãåããã£ã¬ã¯ããªã«`.wav`ãã¡ã€ã«ãäœæãããŸãããããéããšãå®ç§ãªA4ããŒããèãããŸãïŒ
ãšã³ãããŒãïŒADSRïŒã«ããé³ã®ã·ã§ãŒãã³ã°
ç§ãã¡ã®çŽé³ã¯å°ãéå±ã§ãã abrupt ã«å§ãŸã abrupt ã«çµãããŸããçŸå®äžçã®é³ã¯ãã€ãããã¯ãªåœ¢ç¶ãæã£ãŠããŸããããããšã³ãããŒãã䜿çšããŠå¶åŸ¡ã§ããŸããæãäžè¬çãªã¿ã€ãã¯ADSRãšã³ãããŒãã§ãïŒ
- ã¢ã¿ãã¯ïŒé³ããŒãããããŒã¯ã¬ãã«ãŸã§äžæããã®ã«ãããæéã
- ãã£ã±ã€ïŒããŒã¯ãããµã¹ãã€ã³ã¬ãã«ãŸã§äœäžããã®ã«ãããæéã
- ãµã¹ãã€ã³ïŒããŒããã¢ã¯ãã£ããªéãé³ãä¿æãããã¬ãã«ã
- ãªãªãŒã¹ïŒããŒãããªãªãŒã¹ãããåŸãé³ããŒãã«ãã§ãŒãããã®ã«ãããæéã
ãµã€ã³æ³¢ã«ç°¡åãªç·åœ¢ã¢ã¿ãã¯ãšãªãªãŒã¹ãé©çšããŠã¿ãŸãããã
# --- ãšã³ãããŒããã©ã¡ãŒã¿ ---
attack_time = 0.1 # ç§
release_time = 0.5 # ç§
# ãšã³ãããŒããäœæ
attack_samples = int(sr * attack_time)
release_samples = int(sr * release_time)
sustain_samples = len(t) - attack_samples - release_samples
attack = np.linspace(0, 1, attack_samples)
# ç°¡åã«ããããã«ããã£ã±ã€ãã¹ããããããµã¹ãã€ã³ã¬ãã«ã1ã«ããŸã
sustain = np.ones(sustain_samples)
release = np.linspace(1, 0, release_samples)
envelope = np.concatenate([attack, sustain, release])
# ãµã€ã³æ³¢ããŒã¿ã«ãšã³ãããŒããé©çš
enveloped_data = data * envelope
# æ°ããé³ããã¡ã€ã«ã«æžã蟌ã
write('enveloped_sine_wave.wav', sr, enveloped_data.astype(np.int16))
print("Generated 'enveloped_sine_wave.wav' successfully.")
ãã®æ°ããé³ã¯ã¹ã ãŒãºã«ãã§ãŒãã€ã³ããç©ããã«ãã§ãŒãã¢ãŠãããããããã鳿¥œçã§èªç¶ã«èãããŸãã
å ç®åæã«ããè€éãã®æ§ç¯
次ã«ãåé³ãå ããŠãããè±ããªé³è²ãäœæããŸããããäŸãã°ãç©åœ¢æ³¢ã¯ãåºé³åšæ³¢æ°ãšããã«å¯Ÿå¿ããŠæ¯å¹ ãæžå°ãããã¹ãŠã®å¥æ°åé³ã®åèšã§æ§æãããŠããŸãããããè¿äŒŒããŠã¿ãŸãããã
# --- å ç®åæ ---
fundamental_freq = 220.0 # A3ããŒã
# åºé³ããéå§
final_wave = np.sin(2. * np.pi * fundamental_freq * t)
# 奿°åé³ã远å
num_harmonics = 10
for i in range(3, num_harmonics * 2, 2):
harmonic_freq = fundamental_freq * i
harmonic_amplitude = 1.0 / i
final_wave += harmonic_amplitude * np.sin(2. * np.pi * harmonic_freq * t)
# æ³¢åœ¢ãæ£èŠåããŠã¯ãªããã³ã°ïŒæ¯å¹
> 1ïŒãé²ã
final_wave = final_wave / np.max(np.abs(final_wave))
# åã®ãšã³ãããŒããé©çš
rich_sound_data = (amplitude * final_wave) * envelope
# ãã¡ã€ã«ã«æžã蟌ã
write('additive_synthesis_sound.wav', sr, rich_sound_data.astype(np.int16))
print("Generated 'additive_synthesis_sound.wav' successfully.")
ãã®æ°ãããã¡ã€ã«ãèããŠã¿ãŠãã ãããåçŽãªãµã€ã³æ³¢ãããã¯ããã«è±ãã§è€éãªé³ãèãããç©åœ¢æ³¢ã®ããããããé³ã«è¿ã¥ããŸããããªãã¯å ç®åæãè¡ã£ãã°ããã§ãïŒ
ããŒã3ïŒå ±çé¢ä¿ïŒåæãšåæã®åæ
åæãšåæãå¥ã ã®ãããã¯ãšããŠæ±ããŸãããããããã®çã®åã¯ãäžç·ã«äœ¿çšããããšãã«è§£ãæŸãããŸãããããã¯ãçè§£ãåµé ãå°ããåµé ãçè§£ã®ããã®æ°ããææãæäŸãããã£ãŒãããã¯ã«ãŒãã圢æããŸãã
äžçãã€ãªãæ¶ãæ©ïŒååæ
2ã€ãåºäŒãæããšããµã€ãã£ã³ã°ãªåéã®1ã€ã¯ååæã§ããããã»ã¹ã¯æ¬¡ã®ãšããã§ãïŒ
- åæïŒå®éã®é³ïŒäŸïŒãã€ãªãªã³ã®é²é³ïŒãåã蟌ã¿ããã®äž»èŠãªé³é¿ç¹åŸŽéâãã®åé³ã³ã³ãã³ãããããã®å€åãæ¯å¹ ãšã³ãããŒããæœåºããŸãã
- ã¢ãã«ïŒãããã®ç¹åŸŽéã«åºã¥ããæ°åŠçã¢ãã«ãäœæããŸãã
- åæïŒåæãšã³ãžã³ã䜿çšããŠããã®ã¢ãã«ã«åºã¥ããæ°ããé³ãçæããŸãã
ããã«ãããéåžžã«ãªã¢ã«ãªåææ¥œåšãäœæããããããé³ã®ç¹åŸŽãå¥ã®é³ã«é©çšãããã§ããŸãïŒäŸïŒäººéã®å£°ã®ã¹ãã¯ãã«ãšã³ãããŒããé©çšããŠãã®ã¿ãŒãã話ããŠãããããã«èãããããŸãïŒã
ãªãŒãã£ãªãšãã§ã¯ãã®äœæ
äºå®äžãã¹ãŠã®ããžã¿ã«ãªãŒãã£ãªãšãã§ã¯ãâãªããŒãããã£ã¬ã€ããã£ã¹ããŒã·ã§ã³ãã³ãŒã©ã¹âã¯ãåæãšåæã®çµã¿åããã§ãã
- ãã£ã¬ã€/ãšã³ãŒïŒããã¯åçŽãªããã»ã¹ã§ããã·ã¹ãã ã¯å ¥åãªãŒãã£ãªãåæãããããã¡ïŒã¡ã¢ãªã®äžéšïŒã«ä¿åãããã®åŸããã°ãã°æ¯å¹ ãæžè¡°ãããŠãåŸã§åºåã¹ããªãŒã ã«åæããŠæ»ããŸãã
- ãã£ã¹ããŒã·ã§ã³ïŒãã®ãšãã§ã¯ãã¯ãå ¥åä¿¡å·ã®æ¯å¹ ãåæããŸãããããããå€ãè¶ ãããšã波圢ãã¯ãªãããŸãã¯å€æŽããæ°åŠé¢æ°ïŒããŠã§ãŒãã·ã§ã€ããŒãïŒãé©çšããŠæ°ããåºåãåæããè±ããªæ°ããåé³ã远å ããŸãã
- ãªããŒãïŒããã¯ç©ççãªç©ºéã®é³ãã·ãã¥ã¬ãŒãããŸããããã¯ãå®éã®éšå±ã®é³é¿ç¹æ§ã®åæã«åºã¥ããŠã¢ãã«åããããç¡æ°ã®å°ããªãæžè¡°ããŠãããšã³ãŒïŒåå°ïŒãåæããè€éãªããã»ã¹ã§ãã
ãã®çžä¹å¹æã®çŸå®äžçã§ã®å¿çš
åæãšåæã®çžäºäœçšã¯ãæ¥çå šäœã§ã€ãããŒã·ã§ã³ãæšé²ããŠããŸãïŒ
- é³å£°æè¡ïŒããã¹ãèªã¿äžãïŒTTSïŒã·ã¹ãã ã¯äººéã®ãããªé³å£°ãåæãããã°ãã°å€§éã®é²é³ããã人éã®é³å£°ã®æ·±ãåæã§ãã¬ãŒãã³ã°ãããŸããéã«ãèªåé³å£°èªèïŒASRïŒã·ã¹ãã ã¯ããŠãŒã¶ãŒã®å£°ã®åæãè¡ã£ãŠããã¹ãã«æžãèµ·ãããŸãã
- 鳿¥œæ å ±æ€çŽ¢ïŒMIRïŒïŒSpotifyã®ãããªã·ã¹ãã ã¯ã鳿¥œã«ã¿ãã°ã®æ·±ãåæã䜿çšããŠãæ²ã®ç¹åŸŽïŒãã³ãããžã£ã³ã«ãã ãŒãïŒãçè§£ããŸãããã®åæã¯ãæ°ãããã¬ã€ãªã¹ããåæãããã鳿¥œããããããããããããã«äœ¿çšã§ããŸãã
- çæã¢ãŒããšé³æ¥œïŒææ°ã®AIã¢ãã«ã¯ãèšå€§ãªéã®é³æ¥œãŸãã¯é³ã®ããŒã¿ã»ãããåæããåãã¹ã¿ã€ã«ã§å®å šã«æ°ãããªãªãžãã«ã®äœåãåæã§ããŸããããã¯ãåæããŠããåæãããšãããã©ãã€ã ã®çŽæ¥çãªå¿çšã§ãã
- ã²ãŒã ãªãŒãã£ãªïŒé«åºŠãªã²ãŒã ãªãŒãã£ãªãšã³ãžã³ã¯ããªã¢ã«ã¿ã€ã ã§é³ãåæããŸããã²ãŒã ã®ç©çãšã³ãžã³ïŒäŸïŒè»ã®é床ïŒãåæãããããã®ãã©ã¡ãŒã¿ã䜿çšããŠå¯Ÿå¿ãããšã³ãžã³é³ãåæããããšã§ãå®å šã«åå¿çã§ãã€ãããã¯ãªãªãŒãã£ãªäœéšãäœæã§ããŸãã
çµè«ïŒããžã¿ã«ãªãŒãã£ãªã«ãããããªãã®æ
ç§ãã¡ã¯ãåè§£ããæ§ç¯ãžãé³ãçè§£ããããšãããããåµé ããããšãžãšæ ãããŠããŸãããé³é¿åæã¯ãæ·±ãè³ãåŸãããªãŒãã£ãªã®åãæ§è³ªãå®éåãããããããŒã¿ã«å€æããããã®ããŒã«ãæäŸããŠãããããšãèŠãŠããŸããããŸããé³å£°åæã¯ãæ°åŠçè«çããç¡ããæ°ããé³ã®äžçãæ§ç¯ããããã®é³è²ã®ãã¬ãããäžããŠãããããšãèŠãŠããŸããã
éèŠãªã®ã¯ããããã¯å¯Ÿç«ããåã§ã¯ãªããåãã³ã€ã³ã®è£è¡šã§ãããšããããšã§ããæé«ã®ãªãŒãã£ãªã¢ããªã±ãŒã·ã§ã³ãæãæŽå¯åã®ããç ç©¶ããããŠæãåµé çãªèžè¡ç詊ã¿ã¯ããã°ãã°ããã2ã€ã®åéã®äº€å·®ç¹ã«ååšããŸããåæãéããŠæœåºãããç¹åŸŽéã¯ãã·ã³ã»ãµã€ã¶ãŒã®ãã©ã¡ãŒã¿ã«ãªããŸããã·ã³ã»ãµã€ã¶ãŒã§äœæããé³ã¯ãåæã¢ãã«ã®ããŒã¿ã«ãªããŸãã
Pythonãšãã®LibrosaãSciPyãNumPyãªã©ã®çŽ æŽãããã©ã€ãã©ãªã®ãšã³ã·ã¹ãã ã«ããããã®é åçãªäžçãæ¢æ±ããããã®åå ¥éå£ã¯ãã€ãŠãªãã»ã©äœããªã£ãŠããŸãããã®èšäºã®äŸã¯åãªãåºçºç¹ã«ãããŸãããæ¬åœã®è奮ã¯ããããã®ãã¯ããã¯ãçµã¿åãããäžæ¹ã®åºåãããäžæ¹ã®å ¥åã«ãã£ãŒãããé³ã®æ¬è³ªã«ã€ããŠããªãèªèº«ã®è³ªåããããšãã«å§ãŸããŸãã
èå³ã®ããé³ãããŒãããŠãã ããããã®ã¹ãã¯ãã«ãåæããŠãã ãããããã«äŒŒãé³ãåæããŠã¿ãŠãã ãããåã®é³ã®æ ã¯ãäžã€ã®ã³ãŒãè¡ããå§ãŸããŸãã