過去の自分がpipenvを使っていたことをようやく思い出したので、やっとpythonコードが書けるようになりました!!
歌った時に音程のチェックができるプログラムを書きたい
カラオケの採点モードみたいなプログラムを作るのが最終目標です!
(raspberrypiに実装して上手く歌えていたらランプ点灯みたいにしたいなあ)
pyaudio、waveインストール
まずは録音するためのpyaudio、音声ファイルを作成するためのwave
brew install pyaudio pipenv install pyaudio
pipenvインストールで早速引っかかる。
Creating a virtualenv for this project... ~ 中略 ~ Installing pyaudio... Error: An error occurred while installing pyaudio!
よし、pipenvはあきらめてpip使おう。
buto@LisanoMacBook-Air ~ % pip install pyaudio Collecting pyaudio Downloading PyAudio-0.2.11.tar.gz (37 kB) Could not build wheels for pyaudio, since package 'wheel' is not installed. Installing collected packages: pyaudio Running setup.py install for pyaudio ... done Successfully installed pyaudio-0.2.11 WARNING: You are using pip version 20.1; however, version 21.3.1 is available. You should consider upgrading via the '/Users/buto/.pyenv/versions/3.8.2/bin/python3.8 -m pip install --upgrade pip' command.
warning出てるけどまあいっか笑 waveも同様にpipでインストールしました
マイクの設定
私は600円ほどのUSBマイクを買いました(Amazonでは売り切れている人気商品!)
今日はraspberrypiではなくMacBookで試してみるのでマイクをPC内蔵からUSBに切り替えます
マイクで録音してwavファイルを作成する
もうコピペでいいですね笑 丁寧なコメントまで書かれているので勉強にもなります
私は録音の秒数を3秒に、サンプルレートを4420Hz、ファイル名をvoice.wavに変更しました
import pyaudio import wave RECORD_SECONDS = 3 #録音する時間の長さ(秒) WAVE_OUTPUT_FILENAME = "voice.wav" #音声を保存するファイル名 iDeviceIndex = 0 #録音デバイスのインデックス番号 #基本情報の設定 FORMAT = pyaudio.paInt16 #音声のフォーマット CHANNELS = 1 #モノラル RATE = 4420 #サンプルレート CHUNK = 2**11 #データ点数 audio = pyaudio.PyAudio() #pyaudio.PyAudio() stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, input_device_index = iDeviceIndex, #録音デバイスのインデックス番号 frames_per_buffer=CHUNK) #--------------録音開始--------------- print ("recording...") frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print ("finished recording") #--------------録音終了--------------- stream.stop_stream() stream.close() audio.terminate() waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb') waveFile.setnchannels(CHANNELS) waveFile.setsampwidth(audio.get_sample_size(FORMAT)) waveFile.setframerate(RATE) waveFile.writeframes(b''.join(frames)) waveFile.close()
このコードを実行すると初回は以下のダイアログが出るのでマイクへのアクセスを許可します
recording...と標準出力に表示されてから3秒録音され、pyファイルと同じディレクトリにvoice.wavが作成されました!
ちなみにCHANNELS=2にするとステレオモードになるそうです 私はマイク1個なのでモノラルでいいですね
余談ですがpyaudioで録音するサンプルコードでは44.1kHzが多かったので調べてみるとCDで使われている周波数だそうです
442Hzでチューニングして歌うと10倍以上の4420Hz以上が録音に適したサンプリング周波数となるのかな??