2009-12-24 2 views
1
var sound:Sound = new Sound(); 
var req:URLRequest = new URLRequest(url); 
sound.load(url) 

사운드 데이터 (mp3)가 그대로 들어 오도록 수정하고 싶습니다. 특히 mp3는 스트림 암호를 사용하여 암호화되므로 데이터를 해독하려고합니다. 어떤 종류의 이벤트를 사용하여 가능합니까?액션 스크립트 사운드 데이터 수정 실시간

답변

3

기존 오디오 스트림을 처리하려면 사운드 객체를로드하지 않고 출력 Sound 객체를 설정해야합니다. 그런 다음 해당 사운드 객체에서 SampleDataEvent.SAMPLE_DATA를 수신합니다.이 객체는 버퍼가 비어있는 Sound 객체가 재생되기 시작할 때 시작됩니다. 당신은 스테레오 PCM 데이터를 버퍼의 입력해야합니다 (부동 소수점 숫자의 쌍.)

그 번호를 얻으려면, 귀하의 의견 Sound 객체 (당신은 단순히에 소리라고 한 일에 Sound.extract() 방법을 사용하여 위의 코드)를 사용하여 PCM 데이터를 ByteArray에 읽습니다. 원하는 ByteArray의 데이터를 처리하여 출력 버퍼에 저장합니다.

var input : Sound; 
var output : Sound; 

// ... set up your input sound source ... // 

output = new Sound(); 
output.addEventListener(SampleDataEvent.SAMPLE_DATA, handleSampleData); 
output.play(); 

// The SAMPLE_DATA event is dispatched whenever the output Sound object 
// buffer is empty. Fill the buffer to keep playing sound. 
function handleSampleData(ev : SampleDataEvent) : void 
{ 
    var buffer : ByteArray = new ByteArray; 

    input.extract(buffer, 2048); 

    // PCM data from input is now in the buffer ByteArray. Filter the sound 
    // data according to your requirements here. 

    ev.data.writeBytes(buffer); 
} 

extract() 메서드에 대한 참조 설명서의 제목에도 샘플 코드가 있습니다.

0

플래시 10에서는이를 수행 할 수 있습니다. 나는 그것이 이전 버전에서 가능한지 확실하지 않습니다. in Flash 10 사운드 클래스에는 Sound 객체에서 재생이 호출 될 때마다 실제로 시작되는 한 가지 새로운 유형의 이벤트 SampleDataEvent가 있으며 Sound 객체가 재생할 수있는 데이터가 없으면 즉 데이터를 요청합니다. 그런 다음 이벤트를 잡아서 일부 mp3 데이터를 쓰고 Sound 객체가이를 재생할 수 있습니다. 이 link이 도움이 될 수 있습니다.