是否可以从 .wav 文件创建 MediaStream?
Posted
技术标签:
【中文标题】是否可以从 .wav 文件创建 MediaStream?【英文标题】:Is it possible to create a MediaStream from a .wav File? 【发布时间】:2019-03-17 13:44:19 【问题描述】:我目前有一个从 navigator.getUserMedia() 接收 MediaStream 的函数,效果很好。我想提供上传音频文件并通过相同功能模仿它的选项。我想知道是否可以上传音频文件并创建一个 Mediastream 对象并通过以下函数传递它?
startUserMedia(stream)
this.setState( audio: stream );
var audioContext = new AudioContext();
var source = audioContext.createMediaStreamSource(stream);
var processor = audioContext.createScriptProcessor(8192, 1, 1);
source.connect(processor);
processor.connect(audioContext.destination);
const that = this;
let audioBuffers = [];
this.setState( currentDuration: 0 );
processor.onaudioprocess = function(e)
// Do something with the data, i.e Convert this to WAV
if (that.state.currentDuration < that.state.chunkDuration)
that.setState(
currentDuration: that.state.currentDuration + e.inputBuffer.duration
);
resampler(e.inputBuffer, 16000, function(event)
const buffer = event.getAudioBuffer();
if (that.state.voiceActive)
audioBuffers.push(buffer);
);
else
if (!that.state.voiceActive)
that.mergeAndSendAudio(audioBuffers, audioContext);
that.setState( currentDuration: 0 );
audioBuffers = [];
audioBuffers.push(e.inputBuffer);
else
audioBuffers.push(e.inputBuffer);
;
var options =
onVoiceStart: function()
console.log("voice start");
that.setState( voiceActive: true );
,
onVoiceStop: function()
console.log("voice stop");
that.setState( voiceActive: false );
,
onUpdate: function(val)
// console.log('curr val:', val);
;
vad(audioContext, stream, options);
【问题讨论】:
【参考方案1】:找到答案:
handleselectedFile = event =>
this.setState(
selectedFile: event.target.files[0],
loaded: 0
);
const objectURL = window.URL.createObjectURL(event.target.files[0]);
const audio = new Audio(objectURL);
const stream = audio.captureStream();
audio.play().then(_ =>
this.startUserMedia(stream);
); // stream now has input
;
【讨论】:
我使用 .wav 文件作为输入。但这对我不起作用以上是关于是否可以从 .wav 文件创建 MediaStream?的主要内容,如果未能解决你的问题,请参考以下文章