Обрезка звука в ActionScript - PullRequest
0 голосов
/ 17 января 2012

Я знаю, как записать звук в ActionScript 3. Но возможно ли что-то вырезать из окончательного звукового файла в ActionScript?

Мой пример использования заключается в том, что пользователь может перейти к определенной точке взвуковой файл (я могу управлять этим) и начать запись оттуда (по существу, перезаписывая остальную часть файла).

Возможно ли это в ActionScript 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();
    }
}

1 Ответ

0 голосов
/ 17 января 2012

Да.Когда вы получаете байты из аудиопотока, вы добавляете их в главный буфер.Если вы хотите сделать запись в стиле punch-in.Вам нужно знать смещение в главном буфере, куда вы хотите пробить.Таким образом, вместо записи в буфер с самого начала, вы записываете в буфер со смещения, на которое нажал пользователь.Вы должны будете связать указатель мыши со смещением в вашем основном буфере.Затем, когда вы получите новое аудио, просто перезапишите значения в этом буфере.Если вы хотите сделать удар, то он перезаписывает только небольшую часть аудио.Вам понадобится конечная точка в главном буфере, где также можно остановить запись новых данных.Пользователь может выделить часть аудио, чтобы получить точки входа / выхода, скажем.

Вам придется использовать ByteArrays для двух буферов.Вы можете извлечь необработанные байты из Sound, используя Sound.extract ().Здесь также могут быть использованы другие источники необработанного звука:

var master : ByteArray;  // assume this is loaded with some audio

public function punchIn( startLocation : index, sound : Sound ) : void {
    sound.extract( master, sound.bytesTotal, startLocation );
}

Изменяя параметр длины, вы можете использовать функцию punch in и punch out.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...