Lazarus - .wav文件按顺序播放

时间:2015-01-15 05:46:36

标签: pascal lazarus

我正在制作一个号码转语音节目。我已经记录了所有的声音样本并且正常工作,但每次输入按顺序排列数字(012 ...等)时,它将开始播放剩余的数字到9,与输入相对。 / p>

例如,如果键入24601,则会显示:

  

2..4..6..0..1 ..的 2..3..4..5..6..7..8..9..0 ..

它不应该这样做。如果有的话,它甚至会用序列覆盖剩余的数字。

完整代码:http://pastebin.com/vFfBRYUu

这是违规代码块。如果你需要剩余的部分,我会把它们放好:

procedure TForm1.Button1Click(Sender: TObject);
begin
  for i := 0 to Length(input.Text) do
  begin
    case var1[i] of
     '0': PlaySound('zero.wav',0,SND_SYNC);
     '1': PlaySound('one.wav',0,SND_SYNC);
     '2': PlaySound('two.wav',0,SND_SYNC);
     '3': PlaySound('three.wav',0,SND_SYNC);
     '4': PlaySound('four.wav',0,SND_SYNC);
     '5': PlaySound('five.wav',0,SND_SYNC);
     '6': PlaySound('six.wav',0,SND_SYNC);
     '7': PlaySound('seven.wav',0,SND_SYNC);
     '8': PlaySound('eight.wav',0,SND_SYNC);
     '9': PlaySound('nine.wav',0,SND_SYNC);
     '-': Delay(400);
     '&': PlaySound('start.wav',0,SND_SYNC);
     '*': PlaySound('call to mess.wav',0,SND_SYNC);
    end;

    Delay(100);
end;                     

输入到数组:

procedure TForm1.inputChange(Sender: TObject);
begin
  y := y+1;
  var1[y-1] := input.Text[y]
end;             

1 个答案:

答案 0 :(得分:3)

y变量似乎永远不会重置,这意味着您将文本追加到var1。但是你总是从0元素开始播放来自var1的元素的文本长度。

Input Text | Stored text        | Played text

0123         0123                 0123
876          0123876              012
12345678     012387612345678      01238761
111          012387612345678111   012

听起来像个错误。

还有一些错误:

  • 看到它总是播放太多数字,input.Text长度未正确重置
  • 您迭代input.Text,但您可以使用var1变量进行游戏。你应该总是迭代并访问相同的数组/字符串!
  • 如果迭代字符串
  • ,循环应为for i := 1 to Length(input.Text) do
  • 依赖于var1
  • 中隐藏的文字起始位置知识
  • 可能只是您的示例,但您尚未使用for
  • 关闭end;循环
  • 无意义/不说话的变量名称
  • 格式化(我已将其修复为您的问题,请检查)

您也可以自行进行一些调试,通过在“说出”之前输出var1来显示错误。例如。 ShowMessage(var1)或类似的;