前回から引き続いて、Windowsでのマイク音声の制御について記載します。
今回は、録音です。今回フーリエ変換しようかと思っていましたが、まずは音声を録音してそれを解析するような形の方がよいのかもと思って録音にしてみました。
今後は、フーリエ変換による周波数の取り方や音声レベルの取得なんかをしていきたいと思います。
2021/11/18追記
本記事では、とにかくファイルを保存することを焦点においています。
より実用的にリアルタイムでファイルにWabeデータを書き込む方法を以下で紹介していますので、以下も参考にしてみてください。
Pyaudio 実行結果
今回も前回に続いて、Pyaudioを使って音声の取得をします。
pyaudioってどうやって使うのって方は、↓を見てみてください。
サンプルコード
じゃあ保存方法の説明の前にコードを全部を張り付けておきます。
import sys
import pyaudio
import wave
def audiostart():
audio = pyaudio.PyAudio()
stream = audio.open( format = pyaudio.paInt16,
rate = 44100,
channels = 1,
input_device_index = 1,
input = True,
frames_per_buffer = 1024)
return audio, stream
def audiostop(audio, stream):
stream.stop_stream()
stream.close()
audio.terminate()
def read_plot_data(stream):
data = stream.read(1024)
return data
def rec_exec(file_path):
# 録音データをファイルに保存
wave_f = wave.open(file_path, 'wb')
wave_f.setnchannels(1)
wave_f.setsampwidth(2)
wave_f.setframerate(44100 )
wave_f.writeframes(b''.join(rec_data))
wave_f.close()
if __name__ == '__main__':
args = sys.argv
if len(args) != 1:
# Audio インスタンス取得
(audio,stream) = audiostart()
rec_data = []
print("Start")
# 音声を読み出し
while True:
try:
data = read_plot_data(stream)
rec_data.append(data)
except KeyboardInterrupt:
print("stop")
break
# Audio デバイスの解放
audiostop(audio,stream)
#保存実行
rec_exec( args[1] )
実行結果
では実行してみましょう。
今回は引数で、ファイル名を与えるようにしていますので、実行するファイルの後ろにファイルパスを指定します。

実行結果は以下です。

ためしに、WindowsMediaPlayerで再生してみるとしっかり再生できました。

続いてはプログラムの解説ですが、解説は次ページにて記載します。
コメント