[Javascript] Web Audio APIでマイクの音をデータ取得して解析する方法

Web Audio APIでマイクの音をデータ取得して解析する方法は、以下の通り

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8" />
 <title>音声解析</title>
 </head>
 <body>
 <button onclick="startRecording()">解析開始</button>
 <button onclick="endRecording()">解析終了</button>
 <hr>
 </body>
</html>
<script>
// クロスブラウザ定義
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

// 変数定義
var localMediaStream = null;
var localScriptProcessor = null;
var audioContext = new AudioContext();
var bufferSize = 1024;
var audioData = []; // 録音データ
var recordingFlg = false;


// 音声解析
var audioAnalyser = null;


// 録音バッファ作成(録音中自動で繰り返し呼び出される)
var onAudioProcess = function(e) {
 if (!recordingFlg) return;

 // 音声のバッファを作成
 var input = e.inputBuffer.getChannelData(0);
 var bufferData = new Float32Array(bufferSize);
 for (var i = 0; i < bufferSize; i++) {
 bufferData[i] = input[i];
 }
 audioData.push(bufferData);//録音データに追加

 // オーディオデータ取得
 var fsDivN = audioContext.sampleRate / audioAnalyser.fftSize;
 var spectrums = new Uint8Array(audioAnalyser.frequencyBinCount);
 audioAnalyser.getByteFrequencyData(spectrums);

 //...spectrumsというUint8Arrayデータをあとは解析する
 //例えば、Circular Audio WaveのようなUint8Arrayを扱っているオーディオビジュアライザにわたすとマイクの音声を視覚化できる
 
};



// 解析開始
var startRecording = function() {
 recordingFlg = true;
 navigator.getUserMedia({audio: true}, function(stream) {
 // 録音関連
 localMediaStream = stream;
 var scriptProcessor = audioContext.createScriptProcessor(bufferSize, 1, 1);
 localScriptProcessor = scriptProcessor;
 var mediastreamsource = audioContext.createMediaStreamSource(stream);
 mediastreamsource.connect(scriptProcessor);
 scriptProcessor.onaudioprocess = onAudioProcess;
 scriptProcessor.connect(audioContext.destination);

 // 音声解析関連
 audioAnalyser = audioContext.createAnalyser();
 audioAnalyser.fftSize = 2048;
 frequencyData = new Uint8Array(audioAnalyser.frequencyBinCount);
 timeDomainData = new Uint8Array(audioAnalyser.frequencyBinCount);
 mediastreamsource.connect(audioAnalyser);

 },
 function(e) {
 console.log(e);
 });
};

// 解析終了
var endRecording = function() {
 recordingFlg = false;

 //audioDataをサーバに送信するなど終了処理
};

</script>

 

参考URL:

getUserMediaで音声を拾いリアルタイムで波形を出力するhttps://qiita.com/mhagita/items/6c7d73932d9a207eb94d

HTML5 の Web Audio API を使ってマイクから入力した音声データを再生するhttp://dotnsf.blog.jp/archives/1072473945.html

Circular Audio Wave
https://github.com/kelvinau/circular-audio-wave

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です