이 AS3 코드에서 "2048"이 포함 된 500 개의 추적 출력이 필요합니다. 하지만 대신 "2048"을 포함하는 일부 줄만 얻습니다. 추적의 나머지 부분은 "0"을 출력하여 extract() 메서드가 아무런 데이터도 반환하지 않는다는 것을 나타냅니다.사운드 파일을 분석하기 위해 루프에서 Sound.extract를 사용하는 AS3
왜 이런 경우입니까? 각각의 위치에서 사운드의 2048 바이트를 추출하는 특정 단계로 사운드 파일을 반복하고 싶습니다. 초 flashplayer를 동결 한 번에 전체 사운드 파일을 추출하기 때문에 이보다 작은 samplesInSound/2048입니다 단계 길이로 볼 수 있습니다 나를
이 문제에 대한 좋은 해결책이 아니다. 이 값이 더 가까울수록 "0"이있는 행이 2048 인 행에 비해 더 많이 인쇄됩니다.
var sound:Sound = new Sound();
sound.load(new URLRequest("soundfile.mp3"));
sound.addEventListener(Event.COMPLETE, soundLoaded);
function soundLoaded(e:Event){
var samplesInSound:Number = sound.length*44.1;
var steps:int = 500;
var byteArray:ByteArray = new ByteArray();
for(var i=0; i<samplesInSound; i += Math.floor(samplesInSound/steps)){
var extracted = sound.extract(byteArray, 2048, i);
trace(i + ": " + extracted);
}
}
는 I는 사운드 파일의 압축 부분 (Actionscript 3 - Sound.extract method empties sound object data에서처럼)를 추출 후, 사운드 파일의 나머지 잘라낸 것을 생각했다 그래서 루프 다른 시용 :
for(var i=0; i<samplesInSound - steps * 2048; i += Math.floor(samplesInSound/steps) - 2048)
하지만이 방법도 효과가 없었습니다.
누구든지이 문제를 해결할 수 있습니까?
감사 :
여기에 가능한 솔루션입니다. 불행히도 내 계획은 각 루프에서 추출한 데이터보다 큰 단계로 사운드를 반복하는 것입니다. 예를 들어, 다음과 같습니다 : 'sound.extract (byteArray, 2048, 0) // 사운드에 2048 샘플을 전달합니다. sound.extract (byteArray, 2048, 10000) // 우리는 10000 개의 샘플입니다. 다른 것을 잡아라 2048 sound.extract (byteArray, 2048, 20000) // 우리는 20000 개의 샘플을 가지고 있고, 2048 등을 붙잡는다. ' 내가 말한 얼어 붙은 문제에 대해 알고있다. 마지막 코드에서 프레임에 루프를 연결하거나 예제에서와 같이 타이머에 루프를 연결합니다. – user914964