我在网上看到一个语音闹钟程序,语音原理就是把不同的声音地址存放在数组里,最后再用MediaPlayer播放,可是那样的话,声音文件就必须和.exe程序在一起才行。我想把声音文件放在自定义资源res里了,可是只会用playsound(hinstance,‘name’,snd_..)单独播放.怎么样把资源里的音乐文件获取方式存放在数组里,组成一句话播放。

解决方案 »

  1.   


    var
      i: integer;
      rs: TResourceStream;
    begin
      for i:= Low(WaveArr) to High(WaveArr) do
      begin
      Case WaveArr[i] of 
      0: rs := TResourceStream.Create(HInstance, 'sound0', 'WAVE');
      1: rs := TResourceStream.Create(HInstance, 'sound1', 'WAVE');
      2: rs := TResourceStream.Create(HInstance, 'sound2', 'WAVE');
      3: rs := TResourceStream.Create(HInstance, 'sound3', 'WAVE');
      4: rs := TResourceStream.Create(HInstance, 'sound4', 'WAVE');
      5: rs := TResourceStream.Create(HInstance, 'sound5', 'WAVE');
      end;
      sndPlaySound(rs.Memory, SND_ASYNC or SND_MEMORY);
      rs.Free;
      end;
    end;
    // 比如说,你的WaveArr是 [0,2,5],就连续执行播放那几个声音 (WaveArr 是 Array of integer)
      

  2.   

    我试一下不可以呀,sndPlaySound(rs.Memory, SND_ASYNC or SND_MEMORY);不能用,可是sndPlaySound(rs.Memory,hinstance SND_ASYNC or SND_MEMORY);默认播放数组里第一个声音,而且无法实现WaveArr[0,2,5]这个播放方式,请再指点一下。
    顺便问一下,mp3在资源里也保存为wave格式,我引用wave的格式sndPlaySound('name',hinstance SND_ASYNC or SND_RESOURCE);引用mp3怎么没有播放声音?