Запись и сохранение файлов .wav с помощью TMediaPlayer (Delphi 2010) - PullRequest
0 голосов
/ 05 июля 2010

ну, я действительно новичок в мире Delphi.

Сейчас я использую TMediaPlayer для записи звука и его сохранения. Я сделал событие click для кнопки записи в TMediaPlayer, который выполняет SaveFileDialog. Пользователь должен ввести какое-нибудь имя файла, которое он хотел бы сохранить, и затем после записи файла .wav он может нажать на кнопку остановки, и он сохранит записанный файл .wav.

На самом деле это не событие, создающее файл.

Я покажу некоторые важные части кода моего кода Delphi

if Button = TMPBtnType.btRecord then
begin
SaveDialogSpeichern.Execute;
MediaPlayerSound.FileName := SaveDialogSpeichern.FileName;
MediaPlayerSound.StartRecording;

end

и те, для сохранения:

  MediaPlayerSound.Stop;
  MediaPlayerSound.Save;

Я не могу использовать bass.dll, поэтому я хотел бы сделать это с помощью TMediaPlayer, если есть возможный способ

Ответы [ 3 ]

2 голосов
/ 14 июля 2012

А также я хочу добавить это; Вы можете начать останавливать и сохранять свою запись, используя этот способ

procedure TForm1.Button1Click(Sender: TObject);     // Record
begin
  mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, Handle);
  mciSendString('SET mysound TIME FORMAT MS ' +     // set time
    'BITSPERSAMPLE 8 ' +                // 8 Bit
    'CHANNELS 1 ' +                     // MONO
    'SAMPLESPERSEC 8192 ' +             // 8 KHz
    'BYTESPERSEC 8192',                // 8000 Bytes/s
    nil, 0, Handle);
  mciSendString('RECORD mysound', nil, 0, Handle);
end;


procedure TForm1.Button2Click(Sender: TObject);     // Stop
begin
  mciSendString('STOP mysound', nil, 0, Handle)
end;


procedure TForm1.Button3Click(Sender: TObject);      // Save

begin
mciSendString(PChar('SAVE mysound "' + '/test.wav'+'"' ), nil, 0,
    Handle);
  mciSendString('CLOSE mysound', nil, 0, Handle)
end;
2 голосов
/ 05 июля 2010

Я нашел решение для моей проблемы. Похоже, что TMediaPlayer также не поддерживает создание звуковых файлов. Запись звуковых файлов.

Есть способ использовать WinApi (используя mmSystem;)

я использовал этот код:

    mciSendString(PChar('OPEN NEW TYPE WAVEAUDIO ALIAS mysound'), nil, 0,
    Handle);
 mciSendString(PChar('SET mysound TIME FORMAT MS ' +     
   'BITSPERSAMPLE 8 ' +                
   'CHANNELS 1 ' +                     
   'SAMPLESPERSEC 8000 ' +             
   'BYTESPERSEC 8000'),                
   nil, 0, Handle);
 mciSendString(PChar('RECORD mysound'), nil, 0, Handle);
mciSendString(PChar('SAVE mysound "' + SaveDialogSpeichern.FileName+'"' ), nil, 0,
    Handle);
mciSendString(PChar('CLOSE mysound'), nil, 0, Handle) 

надеюсь, что это поможет любому с той же проблемой

0 голосов
/ 12 мая 2019

Я решил вашу проблему с TMediaPlayer: для записи вы должны добавить команду «open» следующим образом:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    this->SaveDialog1->Execute();
    this->MediaPlayer1->FileName = this->SaveDialog1->FileName;
    this->MediaPlayer1->Open();
    this->MediaPlayer1->StartRecording();
}

Предупреждение: TMediaPlayer не поддерживает создание звуковых файлов (как вы сказали),поэтому вы должны написать новый файл вручную перед использованием (weired).

Вы можете сделать это вручную (просто создайте новый .wav где-нибудь) или использовать этот код: (Я рекомендую использовать этот код, если вы делаетене хотите записывать в существующий файл:)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    this->SaveDialog1->Execute();
    this->MediaPlayer1->FileName = this->SaveDialog1->FileName;

    TMemoryStream *AudioFile;
    AudioFile = new TMemoryStream();
    char buffer[43]= 0x52,0x49,0x46,0x46,0x04,0xc0,0x50,0x00,0x57,0x41,0x56,0x45,0x66,0x6D,0x74,0x20,
    0x10,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x44,0xAC,0x00,0x00,0x88,0x58,0x01,0x00,
    0x02,0x00,0x10,0x00,0x64,0x61,0x74,0x61,0xE0,0xBF,0x50}; // .wav header example
    AudioFile->Write(buffer,43);
    char byte=0;
    for (int i = 0; i < 49120; i++) // some free audiodata
    {
        AudioFile->Write(&byte,1);
    }
    AudioFile->SaveToFile(this->SaveDialog1->FileName);
    AudioFile->Clear();
    delete AudioFile;
    AudioFile=NULL;

    this->MediaPlayer1->Open();
    this->MediaPlayer1->StartRecording();

}

// кнопка остановки:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    this->MediaPlayer1->Stop();
}

// кнопка сохранения:

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    this->MediaPlayer1->Save();
    this->MediaPlayer1->Close();
}
...