2016-08-10 15 views
1

私はアンドロイド携帯電話(看護師)とタブレット(患者用)で動作するwebrtcアプリケーションを持っています。基本的には、私は看護師が患者側で何が起きているのかを聞いて聞くことができる(オーディオストリームのみ)リモートアシスタントシステムを実装しています。タブレットは壁に取り付けられ、患者のベッドは通常は少し離れているので、 webrtc/android側のマイクゲインを上げて低音域の音を聞きたい。私はGoogleの手掛かりを見つけようとしますが、興味深いものは見つけられません。誰かが私にどのように私はマイクの感度を高めるだろうヒントを与えることができますか?webrtcのマイクゲインを上げる方法

------------------------サンプルコード--------------------

enabled: true 
id: "8e4363c2-f1c8-44ec-9bed-f3414f3b943a" 
kind: "audio" 
label: "Default" 
muted: false 
onended: null 
onmute: null 
onunmute: null 
readyState: "live" 

これは、DSTを取得し、新しいオーディオトラックである:これは私がlocalstreamから取得オリジナルのオーディオトラックである : - 私は以前と新しいオーディオトラックの違いを発見したデバッグで

function getLocalStream(successCallback) { 
    if (localStream && successCallback) { 
     successCallback(localStream); 
     return; 
    } 
    navigator.getUserMedia(streamOptions, function (str) { 
     var stream= modifyGain(str); 

     uiHandler("peer.call.localstream", {payload: stream}); 
     localStream = stream; 
     if (successCallback) { 
      successCallback(stream); 
     } 
    }, function (err) { 
     uiHandler("status.error", {payload: "Failed to access local camera", error: err}); 
    }); 
} 

function modifyGain (stream){ 
    var audioTrack = stream.getAudioTracks()[0]; 
    var ctx = new AudioContext(); 
    var src = ctx.createMediaStreamSource(stream); 
    var dst = ctx.createMediaStreamDestination(); 
    var gainNode = ctx.createGain(); 
    gainNode.gain.value = 50; 
    [src, gainNode, dst].reduce(function(a, b) { return a && a.connect(b) }); 
    stream.removeTrack(audioTrack); 
    var newAudioTrack = dst.stream.getAudioTracks()[0]; 

    stream.addTrack(newAudioTrack); 
    return stream; 
}; 

.stream.getAudioTracks()[0];

enabled: true 
id: "cc0c4293-a606-407e-9adb-4caddaa32583" 
kind: "audio" 
label: "MediaStreamAudioDestinationNode" 
muted: false 
onended: null 
onmute: null 
onunmute: null 
readyState: "live" 

ストリームを再生するIDとラベルは重要ですか?

+0

実際のハードウェアマイクを制御できるのであればダンノーですが、[webaudioで処理する](http://stackoverflow.com/a/35000726/918910)で入力信号のゲインを上げることができます。一部のブラウザでは、[autoGainControl](http://stackoverflow.com/a/37332145/918910)もオンにすることができます。唯一のトリックは、トラック操作をサポートしていないChromeのストリームにAFAIKを戻すことです。 – jib

+0

MediaStreamを使用する代わりに何か他のものを使用できますか?基本的に私はcorodovaプラグインを介してモバイルでこれを使用しようとしています、そしてchromeバージョンは現在MediaStreamをサポートしていない44を示しています。 Uncaught ReferenceErrorを取得すると、MediaStreamがオンラインで定義されていません。var src = ctx.createMediaStreamSource(new MediaStream([audioTrack])); –

+0

あなたはオーディオのみですので、分離と置き換えの手順を省略することができます。 'ctx.createMediaStreamSource(stream)'を試してみて、それで 'ctx.createMediaStreamDestination()'はすでに使用しているメディアストリームを返します。 – jib

答えて

0

実際のハードウェアマイクを制御できるかどうかわかりませんが、WebAudioで処理することで入力信号のゲインを上げることができます。

(Chromeでhttps fiddleを使用)、これを試してみてください:

navigator.mediaDevices.getUserMedia({audio: true}) 
 
    .then(stream => audio.srcObject = modifyGain(stream, 2.5)) 
 
    .catch(e => console.log(e)); 
 

 
var modifyGain = (stream, gainValue) => { 
 
    var ctx = new AudioContext(); 
 
    var src = ctx.createMediaStreamSource(stream); 
 
    var dst = ctx.createMediaStreamDestination(); 
 
    var gainNode = ctx.createGain(); 
 
    gainNode.gain.value = gainValue; 
 
    [src, gainNode, dst].reduce((a, b) => a && a.connect(b)); 
 
    return dst.stream; 
 
};
<audio id="audio" controls autoplay></audio>

一部のブラウザ(Firefoxは)また、あなたがオンに試みることができるmozAutoGainControlを持っています。

+0

私は自分の質問を更新しましたあなたがなぜ私はmodifyGainメソッドを呼び出す場合、私は任意のオーディオを取得していない教えていただけますか? –

+0

[Wfm](https://jsfiddle.net/jib1/z9gybrz3/)。まずローカルで動作するかどうかを確認して、問題を特定してください。 – jib

+0

私はローカルのブラウザでこれをテストしましたが、うまくいきましたが残念ながらこの機能は古いブラウザ(chrome version 43)の一部ではなく、アンドロイドデバイスのcordovaプラグインでは機能しません。私はcordova APIでchromeバージョンをアップグレードするのを待つ必要があります。 –

関連する問題