音楽の再生には何bit必要?
ESP32のDACに音を出力する場合、8bitというのはどんなもんなんだろう。 bit数が足りないために音声が、まともに聞こえないというのでは困るなぁと思い、実験してみた。
pythonのwavライブラリを使うとwavファイルの操作ができる。これを使って、wavファイルのデータを指定したbit数まで落とすプログラムを作成した。処理に結構時間が、かかるので10秒だけ出力する。
結果、私のPCの再生環境では8bitと12bitの聞き分けができないことが判明。8bitからbit数を落として行ってもホワイトノイズが増えていくだけで、あまり問題無く聞ける。1bitだとノイズがかなり大きいが、それでも曲は判別可能。予想外の結果だった。
変換した結果を以下に示す。元の曲は魔王魂さんのフリー歌もの素材「桜日和」。
1bitの音源:(音量注意)
2bit:
3bit:
4bit:
5bit:
6bit:
8bit:
12bit:
変換プログラムは、こんな感じ
#!/usr/bin/python3 import sys,wave,struct usage = "Usage:%s input.wav output.wav n" % sys.argv[0] if len(sys.argv) != 4 : print(usage) sys.exit(1) in_file, out_file, bits_str = sys.argv[1:] w = wave.open(in_file) dst = wave.open(out_file,'wb') bits_count = int(bits_str) mask = 0 for i in range(bits_count): mask |= 0x8000 >> i framerate = w.getframerate() dst.setnchannels(2) dst.setsampwidth(2) dst.setframerate(framerate) n = min(w.getnframes(), framerate * 10) data = w.readframes(n) for i in range(n): v0,v1 = struct.unpack_from('HH',data,i*4) dst.writeframes(struct.pack('HH', v0 & mask, v1 & mask)) dst.close() w.close()
最近のコメント