как использовать loadPCMFromByteArray? - PullRequest
2 голосов
/ 28 ноября 2011

Кто-нибудь смог успешно использовать новый метод Sound loadPCMFromByteArray во Flash 11? Я просто слышу повторяющийся тикающий звук всякий раз, когда использую его.

А также есть ли способ установить глубину (биты) в этом методе? кажется, что этот loadPCMFromByteArray понимает только 32-битные данные PCM.

Я искал примеры, но не нашел рабочих примеров

Вот мой пример кода, обратите внимание, что я постоянно добавляю данные в soundBA (объект ByteArray) и очищаю их после передачи их в метод loadPCMFromByteArray, также я просто вынужден выполнить проверку (8192 * 4 ) поскольку действительно кажется, что метод loadPCMFromByeArray распознает только 32-битные аудиосэмплы, как я могу настроить его на чтение 8-битных и 16-битных семплов?:

if (soundBA.bytesAvailable >= (8192 * 4 * channels))
{ 
    soundPlayer.loadPCMFromByteArray(soundBA, soundBA.bytesAvailable / 4, "float", false, 22050);
    soundChannel = soundPlayer.play();
    soundBA.clear();
}

Ответы [ 2 ]

1 голос
/ 08 января 2012

Я ищу то же самое, что и вы, но у меня уже есть часть ответа. Прежде чем пытаться использовать функцию «loadPCMFromByteArray», я использовал as3wavsound lib , которая использует библиотеку звуковых манипуляций под названием « sazameki ». Эта последняя библиотека дает вам возможность транскодировать 8 или 16 битов в вектор чисел. Вам просто нужно взять этот вектор и записать его в ByteArray с:

var someByteArray:ByteArray = new ByteArray();
for (....){
  someByteArray.writeFloat(number);
}

затем передайте ему функцию loadPCMFromByteArray. У вас должна быть ошибка, потому что ваша позиция в ByteArray не очень хорошая. Так что сбросьте это. Ваш окончательный код должен выглядеть так:

var flexSound:Sound = new Sound();
var someByteArray:ByteArray = new ByteArray();
for (....){
    someByteArray.writeFloat(number);
}
someByteArray.position = 0;
flexSound.loadPCMFromByteArray(someByteArray, length);
flexSound.play();

Надеюсь, это поможет вам.

0 голосов
/ 15 декабря 2013

Я не могу использовать loadPCMFromByteArray, это дает мне эту ошибку:

Вызов возможно неопределенного метода loadPCMFromByteArray через ссылку со статическим типом flash.media:Sound.

_output.position =0;
mySound.loadPCMFromByteArray(_output, _output.length);
channel = mySound.play();
...