我知道如何在动作脚本3中录制音频。但是有可能从动作脚本中删除最终声音文件中的内容吗?
我的用例是,用户可以跳转到声音文件中的特定点(我可以管理)并从那里开始录制(基本上覆盖文件的其余部分)。
这可能在动作3中。如果是,怎么做?
谢谢。
更新:
这是我使用的代码,它可以正常工作,但旧的录音却被放下了。我不知道为什么。 “selectedTime”是用户在波形的图形表示中选择的时间的毫秒值; 44100是我的采样率。
existingByte = new ByteArray();
var extract:Number = Math.floor ((selectedTime)*44.1);
sound.extract(existingByte, extract);
mic.recordData(existingByte);
// in the mic class:
public function recordData(existingByteArray:ByteArray=null):void {
if(existingByteArray == null) {
raw = new ByteArray();
} else {
raw = existingByteArray;
raw.position = raw.length;
}
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, dataHandler);
}
private function dataHandler(event:SampleDataEvent):void {
try {
raw.writeBytes(event.data);
} catch(e) {
this.stopRecording();
}
}
答案 0 :(得分:0)
是。当您从音频流接收字节时,您将其附加到主缓冲区中。如果你想像录音一样打卡。您需要知道要放入主缓冲区的偏移量。因此,不是从一开始就写入缓冲区,而是从用户单击的偏移量写入缓冲区。您必须将鼠标指针与主缓冲区中的偏移量相关联。然后,当您收到新音频时,只需覆盖该缓冲区中的值。如果您想要打卡,那么它只会覆盖音频的一小部分。您需要在主缓冲区中的终点,以便停止写入新数据。用户可以突出显示音频的一部分以进入/退出点。
你必须使用ByteArrays作为两个缓冲区。您可以使用Sound.extract()从Sound中提取原始字节。其他原始音频源也可以在这里应用:
var master : ByteArray; // assume this is loaded with some audio
public function punchIn( startLocation : index, sound : Sound ) : void {
sound.extract( master, sound.bytesTotal, startLocation );
}
通过改变长度参数,您可以进行打卡和打卡功能。