已知:
 1.
   if SaveDialog.Execute then
  WaveStream.SaveToFile(SaveDialog.FileName);
//以上两句成功把WaveStream保存为一个wav文件。2.
          With mp3enc1 do   //调用这个三方控件
           begin
            Enabled:=true;
            SampleRate:=44100;
            BitRate   :=64;
            Open(‘f:\aa.wav’,c:\bb.mp3') ;  //保存为新的mp3文件
            Encode;
           end;
//以上利用三方的Tmp3enc控件省去编码的麻烦,把wav文件成功转为bb.mp3文件。希望:
  根据以上两个条件,怎样通过Tsavedialog控件根据用户选择的保存类型(savedialog1.filter:='wavFile(*.wav)|*.wav|mp3File(*mp3)|*.mp3')可分别存为wav文件或mp3文件?另外在保存成mp3文件时不想再通过已经保存的磁盘文件进行转换,而是直接转换。

解决方案 »

  1.   

      if SaveDialog1.Execute then
      begin
        i := SaveDialog1.FilterIndex;
        case i of
          1:
            begin ShowMessage(IntToStr(i));
              //wav
            end;
          2:
            begin
              //mp3
            end;
        end;
      end;
      

  2.   

    if SaveDialog1.Execute then
      begin
        i := SaveDialog1.FilterIndex;
        case i of
          1:
            begin 
               WaveStream.SaveToFile(SaveDialog.FileName);
            end;
          2:
            begin
              //mp3,具体这里怎么处理?
            end;
        end;
      end;
      

  3.   

    if SaveDialog1.Execute then
      begin
      i := SaveDialog1.FilterIndex;
      case i of
      1:
      begin  
      WaveStream.SaveToFile(SaveDialog.FileName);
      end;
      2:
      begin
      With mp3enc1 do //调用这个三方控件
      begin
      Enabled:=true;
      SampleRate:=44100;
      BitRate :=64;
      Open(‘f:\aa.wav’, SaveDialog.FileName) ; //保存为新的mp3文件
      Encode;
      end;
      end;
      end;
      end;‘f:\aa.wav’可以定义为变量。
      

  4.   

    要不然先保存个临时的wav文件,然后在转换。
      

  5.   

    procedure TForm1.bSaveClick(Sender: TObject);
    var
      i:integer;
      sName:string;//添加这个变量
    begin
      if savedialog.Execute then      
      begin
       i:= savedialog.FilterIndex ;
       case i of
         1:
         begin
          WaveStream.SaveToFile(SaveDialog.FileName);  
         end  ;
         2:
         begin   //存mp3格式
             WaveStream.SaveToFile(sname);
             With mp3enc1 do  
               begin
               Enabled:=true;
               SampleRate:=44100;
               BitRate   :=64;
               Open(sName,savedialog.fileName ) ;  
               Encode;
             end;
           end;
         end;
      end;
    end;
    出现异常“cannot create file""系统找不到指定的路径”。
      

  6.   

    sname你还没赋值,没有路径,你用什么?
      

  7.   

    2:
      begin //存mp3格式
      sName:=extractfilepath(application.ExeName)+'temp.mp3';//尝试添加这一句
      WaveStream.SaveToFile(sname);
      With mp3enc1 do
      begin
      Enabled:=true;
      SampleRate:=44100;
      BitRate :=64;
      Open(sName,savedialog.fileName ) ;
      Encode;
      end;//出个EOleException,"can't determine my Window-Handle'。
    高人们,原谅我太菜,完全业余学delphi……
      

  8.   

    各位大侠,我用临时文件的方法实现了转化,可是在产生mp3文件的同时又多出了一个tmp.wav文件。请高人看一下代码是哪里的毛病?procedure TForm1.bSaveClick(Sender: TObject);
    begin    
      SaveDialog.Filter :='wavFile(*.wav)|*.wav|mp3file(*.mp3)|*.mp3|AllFile(*.*)|*.*';
      SaveDialog.FilterIndex :=2;  savedialog.Execute;      //打开保存对话框
      if savedialog.FileName ='' then exit;  if   ExtractFileExt(SaveDialog.filename) ='.wav'   then
        begin
          WaveStream.SaveToFile(SaveDialog.FileName);  //存为wav格式
        end
      else if   ExtractFileExt(SaveDialog.filename)='.mp3' then
        begin                                                   //存mp3格式
          try         WaveStream.SaveToFile('temp.wav');           //保存为临时文件
              With mp3enc1 do   //调用这个三方控件
               begin
               Enabled:=true;
               SampleRate:=44100;
               BitRate   :=64;
               Open('temp.wav',savedialog.fileName ) ;  //保存为新的mp3文件
                Encode;
               end
          except
            begin
            deletefile('temp.wav');  //删除临时文件
            exit;
            end;
          end;
      end;
    end;
      

  9.   

    你用try..except ..end 是指区间出错时候才会 deletefile('temp.wav') 啊,如果不出错,那么就肯定不删除这个了嘛
    应该用 try ...
       begin
         try ...     except
           //需要的错误处理
         end;
       end
      finaly
        if 存在临时文件,则 deletefile('temp.wav');
    end;