2011-11-15 7 views
2

私はこの問題の良い解決策を思いついています。SoundEffects(wav)を連結して隔離されたストレージに保存する

私は電話でコンテンツとしてマークされた3つの効果音を、すべて同じビットレートで持っています。

  • sound1.wav
  • sound2.wav
  • sound3.wav

は、私は、ユーザーが任意の順序で選択することができるようすることができるようにしたい、またはしかし、何度も彼らが好き、 wavファイルの再生順序を指定して、独立したストレージに保存して戻すことができる選択肢に基づいて新しいwavファイルを生成することができます。

so Thank You Walt Ritscherこれまでのところヘルプが表示されていますが、最終的に私のコーディングスキルは最高に分断されています。私が次のコードで伝えようとしているのは、ユーザがタップ・イベントで任意の/すべてのサウンドを選択するように促され、その選択によって新しいサウンド効果がどのように聞こえるかが決定されるということです(注文など)。まだ私にはわからないことがたくさんあります。私が思いついたコードはここにあります(私のコーディングコンピュータではありません)。

//SO I have this master list of sounds to use, indicated in this block of code: 
//sound1.wav, sound2.wav, sound3.wav 
// my wav files are marked as resources 
// get the wav file from the DLL 
var streamInfo1 = Application.GetResourceStream(
    new Uri(sound1.wav, UriKind.Relative)); 
var streamInfo2 = Application.GetResourceStream(
    new Uri(sound2.wav, UriKind.Relative)); 
var streamInfo3 = Application.GetResourceStream(
    new Uri(sound3.wav, UriKind.Relative)); 

//With the above declarations made, I run each one as a stream as a variable. 
var stream1 = streamInfo1.Stream as UnmanagedMemoryStream; 
var stream2 = streamInfo2.Stream as UnmanagedMemoryStream; 
var stream3 = streamInfo3.Stream as UnmanagedMemoryStream; 



//The user can choose the sounds in any order, and repeat if desired. 
//Let us assume the user chose in this order: 
//sound1.wav + sound1.wav + sound2.wav +sound3.wav 


for (int i = 0; i < 10; i++) 
{ 
    var bytesA = new byte[stream1.Length]; 
    var bytesB = new byte[stream1.Length]; 
    var bytesC = new byte[stream2.Length]; 
} 

// read the bytes from the stream into the array 
stream1.Read(bytesA, 0, (int)stream1.Length); 
stream2.Read(bytesB, 0, (int)stream1.Length); 
stream3.Read(bytesC, 0, (int)stream2.Length); 

var combined = new byte[bytesA.Length + bytesA.Length + bytesB.Length] + bytesC.Length]]; 

// copy the bytes into the combined array 
System.Buffer.BlockCopy(bytesA, 0, combined, 0, bytesA.Length); 
System.Buffer.BlockCopy(bytesB, 0, combined, bytesA.Length, bytesB.Length); 

var outputStream = new MemoryStream(); 
outputStream.Write(combined, 0, combined.Length); 

// substitute your own sample rate 
var effect = new SoundEffect(
     buffer: outputStream.ToArray(), 
     sampleRate: 48000, 
     channels: AudioChannels.Mono); 
var instance = effect.CreateInstance(); 
instance.Play(); 

// save stream to IsolatedStorage 

答えて

1

基本的にストリームからバイトを取得し、新しいバイト配列に結合する必要があります。その配列をUnmanagedMemoryStreamに格納します。

// my wav files are marked as resources 
    // get the wav file from the DLL 
    var streamInfo1 = Application.GetResourceStream(
     new Uri(loopWav, UriKind.Relative)); 
    var streamInfo2 = Application.GetResourceStream(
     new Uri(beatWav, UriKind.Relative)); 

    var stream1 = streamInfo1.Stream as UnmanagedMemoryStream; 
    var stream2 = streamInfo2.Stream as UnmanagedMemoryStream; 

    var bytesA = new byte[stream1.Length]; 
    var bytesB = new byte[stream2.Length]; 

    // read the bytes from the stream into the array 
    stream1.Read(bytesA, 0, (int)stream1.Length); 
    stream2.Read(bytesB, 0, (int)stream2.Length); 

    var combined = new byte[bytesA.Length + bytesB.Length]; 

    // copy the bytes into the combined array 
    System.Buffer.BlockCopy(bytesA, 0, combined, 0, bytesA.Length); 
    System.Buffer.BlockCopy(bytesB, 0, combined, bytesA.Length, bytesB.Length); 

    var outputStream = new MemoryStream(); 
    outputStream.Write(combined, 0, combined.Length); 

    // substitute your own sample rate 
    var effect = new SoundEffect(
      buffer: outputStream.ToArray(), 
      sampleRate: 48000, 
      channels: AudioChannels.Mono); 


    var instance = effect.CreateInstance(); 
    instance.Play(); 

    // save stream to IsolatedStorage 

私は、CoDe MagazineのWP7オーディオについて詳しく書いています。私が必要とする(と素敵なコードサンプルをありがとうございました)何にこれを適用しようとして

http://www.code-magazine.com/Article.aspx?quickid=1109071

+0

私は先に行くと、各サウンドファイルに固有の「VARバイト#」を与えると、対応するユニークな「ストリームを作成する必要があります#.read "行にそれぞれ書き込まれます。私は、 "var combined = new byte [[i1(i = 0、i

+0

私は自分の質問に答えるだけで、コードの見た目を良くし、問題が解決したら適切なクレジットを与えるようにします。 ) –

+0

自分の質問を修正してそこにビジュアルを追加することができます –

関連する問題