2012-03-28 11 views
0

mp3のサンプルの長さの合計がわかりません。フラッシュでのオーディオのサンプルの合計長さを取得

また、mp3に読み込むと、完全に再生されません。それは長さの約半分を果たします。

私がテストしているmp3は、http://bit.ly/GYSOYjで見つけることができます。

私はサウンドを再生するために使用しているコードは次のとおりです。

[Embed(source='assets/ffmangun_loop_79393.mp3')] 
private var _snd_class:Class; 
private var sound:Sound = new _snd_class as Sound; 


protected function application1_creationCompleteHandler(event:FlexEvent):void { 

    sound.length; // 600; 
    sound.bytesTotal;// 44652 

    soundChannel = sound.play(); 
    soundChannel.addEventListener(Event.SOUND_COMPLETE, soundComplete); 
} 

更新
は、それは私がMP3の代わりに埋め込み、それを読み込むことが示唆されました。その結果、MP3は全長再生され、長さとバイト合計は異なる数字になります。

//
バイト= 44652
音長= 600.8163265306122

//負荷動的な値
バイト合計= 44678
音長= 1776.3265306122448

合計埋め込み値更新
これは実行時に決定する必要があります。

+0

将来のドキュメントで許可されていない限り、同じ変数 'sampleDuration'を上書きしているようですか? – Neil

+0

ファイルを埋め込むのではなく読み込む場合も同様ですか? – TheSHEEEP

+0

@Neil - これはタイプミスです。私はそれを削除しました。 –

答えて

3

最初に、「total samples」!= sound.bytesLoaded!= sound.length。彼らはすべて全く異なっています。

以下のコードでは、相違点を説明するために、他のイベントリスナーをいくつか取り上げました。 'Event.SOUND_COMPLETE'のリッスンでは、サウンドが再生されなくなったときにのみ起動するため、最初は非常に信頼性が低いことが証明されているため、最初はほとんど説明しません。また、Event.OPENを使用すると、ファイルの読み込みがまだ開始されていないため、情報を取得または計算することができないため、多くは通知されません。

ProgressEventまたはEnterFrameイベントを使用してサウンドの読み込みを監視し、lengthプロパティを読み取ることができますが、MP3の作成にどのサンプルレートが使用されたかを知る必要があるサンプルそれがステレオであろうとモノであろうと。これらのことを理解したら、長さにサンプルレートを掛けてファイルのサンプル長を簡単に取得できます。

がうまくいけば、この使用例は、役立ちます -

import flash.net.URLRequest; 
import flash.events.Event; 
import flash.media.Sound; 
import flash.media.SoundChannel; 

var sound:Sound; 
var soundChannel:SoundChannel; 
var sampleRate:Number = 44.1; 
var totalSamples:int; 

init(); 
function init():void { 
    sound = new Sound(); 
    sound.load(new URLRequest("http://bit.ly/GYSOYj")); 
    sound.addEventListener(Event.OPEN, soundOpen); 
    sound.addEventListener(Event.COMPLETE, soundComplete); 

    soundChannel = sound.play(); 
    soundChannel.addEventListener(Event.SOUND_COMPLETE, scComplete); 
} 
function soundOpen(e:Event):void{ 
    trace("OPEN:", sound.length); 
} 

function soundComplete(e:Event):void{ 
    trace("COMPLETE:", sound.length); 

    totalSamples = sound.length * sampleRate; 
    trace("SAMPLES", totalSamples); 
} 

function scComplete(e:Event):void{ 
    trace("sound is complete"); 
} 

編集を:提案されているように、1はas3swf(bit.ly/HdhVcW)を使用することができます - しかし、それはそれだけの価値かではない場合にのみ、あなたが決めることができます。

+0

ありがとうございます。「MP3を作成するために使用されたサンプルレートとステレオかモノラルかを知る必要があります。私はこの情報が実行時に利用できないと推測しています。 –

+0

いいえ、確かにそうではありません。再生時にByteArraysを比較することができます。必要な情報を得る方法は常にあります。 :) – NHubben

+0

OK。あなたはFlashがこの情報を持っていると思います。しかたがない。私はオンラインでチェックし、as3swf、http://bit.ly/HdhVcWを使ってこれらの値を取得する間接的な方法を見つけました。あなたの回答にこのページへのリンクを追加すると、私はあなたの回答を答えにします。 –

関連する問題