Solved

Convert WAV to TEXT

Posted on 2004-09-03
17
1,214 Views
Last Modified: 2012-05-05
Convert WAV to TEXT

How to convert WAV to TEXT and play sound from text ?

For example : convert from Wave to Memo.Text and play it from Memo.Text

Thanks.
0
Comment
Question by:sasabistrovic
  • 6
  • 5
  • 5
  • +1
17 Comments
 
LVL 13

Expert Comment

by:BlackTigerX
Comment Utility
you can add the "Microsoft Speech Recognition" and "Microsoft Direct Text-To-Speech" Activex Controls, I have used the Microsoft Text-To-Speech control, and all you have to do besides dropping the component on the form, is call it something like
myControl.Speak('The text here'); or myControl.Speak(Memo1.Text);

use the Component Menu | Import ActiveX control, you'll see those (Microsoft) names listed
0
 
LVL 4

Expert Comment

by:Colin_Dawson
Comment Utility
How exactly do you want to convert WAV to TEXT?   Do you mean spoken words into Text then when you press play turn the words back into speech?

Or do you mean take the RAW binary data that makes up the WAV format and place that into the Text?  It won't be readable.  

I think you need to post more information about what you're trying to accomplish.
0
 

Author Comment

by:sasabistrovic
Comment Utility
No, I didn't mean Text-To-Speech.

Yes, something like taking RAW binary data that makes up the WAV format and place that into the Text.

Thanks.

Sorry, I'm beginner in that.
0
 
LVL 4

Expert Comment

by:Evarest
Comment Utility
This can easily be done with the following function

function ConvertRawFileToText( FileName: string ): string;
var
 Q: integer;
 StringStream: TStringStream;
 MemoryStream: TMemoryStream;
 str: string;
begin
 MemoryStream :=TMemoryStream.Create;
 StringStream :=TStringStream.Create('');
 MemoryStream.LoadFromFile(FileName);
 StringStream.CopyFrom(MemoryStream, 0);
 result :=FastReplace( StringStream.DataString, #0, #1 );
 StringStream.Free;
 MemoryStream.Clear;
 MemoryStream.Free;
end;

The call to FastReplace requires you to include in uses the unit FastStrings.

This can be downloaded from http://www.swissdelphicenter.ch/torry/showcode.php?id=1857

The trick is that you must replace the #0 (null) characters by something else. I chose #1.

Evarest
0
 
LVL 4

Expert Comment

by:Evarest
Comment Utility
And of course, use it as follows:

procedure TForm1.Button1Click(Sender: TObject);
begin
 RichEdit1.Text :=ConvertRawFileToText('C:\WINDOWS\Media\ringin.wav');
end;

Evarest
0
 
LVL 4

Expert Comment

by:Evarest
Comment Utility
If you want to play the sound directly from that Text, you'll need to remember which characters you've replaced... Then it's best to use another method to replace the characters and save the positions in some sort of List.

I can't understand however why you'd like to play from a memo, as you have the WAV on your system. You can play it by calling

var
 aFile: string;
begin
 aFile :='C:\WINDOWS\Media\ringin.wav';
 sndPlaySound(pChar(aFile),snd_Async or snd_NoDefault);
end;

and include MMSystem in the uses of your unit.

Evarest
0
 
LVL 4

Accepted Solution

by:
Colin_Dawson earned 400 total points
Comment Utility
Taking things a step further, instead of FastReplace( StringStream.DataString, #0, #1 );  Which is not really a good idea, as there's a legitimate reason for #0's in this string, you should cycle through the sound file and convert each Byte into it's hex representation.   Before you play the sound you'll need to convert it back.  Another alternative would be to BASE64 encode the stream.  (probably quicker)

you can find components that do the Base64 encode and decode for you at torry.net

Here's a link...  http://www.torry.net/pages.php?id=210   DIMime works pretty well.
0
 
LVL 4

Expert Comment

by:Evarest
Comment Utility
"Which is not really a good idea, as there's a legitimate reason for #0's in this string,"

Indeed, but the initial question was a text representation of the WAV file. This can only be done if you replace all occurencies of #0 by some other representable character.

Evarest
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 4

Expert Comment

by:Colin_Dawson
Comment Utility
Or alternatively encodeing the entire binary file in such a way that you can decode it back into it's original form.

Before I forget, in Win9x the TMemo is limited to 64KB of text MAX.  It's 2GB for Win2000/xp.  You need to becareful that you don't overrun the memo component with data.
0
 
LVL 4

Expert Comment

by:Evarest
Comment Utility
"Before I forget, in Win9x the TMemo is limited to 64KB of text MAX.  It's 2GB for Win2000/xp.  You need to becareful that you don't overrun the memo component with data."

That's why i used a TRichEdit :-) However, loading really large files into a textbox can be quite (very) slow. Some optimization may then be needed...
0
 

Author Comment

by:sasabistrovic
Comment Utility
Well thanks.

How to ConvertTextToRawFile (to encode stream) to play wav sound ?
0
 

Author Comment

by:sasabistrovic
Comment Utility
I tried to encode wav file and than to decode.

Can I (after encoding file) add something to (modify) wav file ?

procedure TForm1.Button3Click(Sender: TObject);
begin
MimeEncodeFile('C:\WINDOWS\Media\ringin.wav','C:\WINDOWS\Media\ringin_hex.txt');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
MimeDecodeFile('C:\WINDOWS\Media\ringin_hex.txt','C:\WINDOWS\Media\ringin2.wav');
end;
0
 
LVL 4

Expert Comment

by:Colin_Dawson
Comment Utility
I should have guessed that was comming.   In order to modify a WAV file, you need to work with it in it's encoded form.  You  need to manipluate the data to that it remains compaible with the WAV format.  You'll find details of it here...

http://www.borg.com/~jglatt/tech/wave.htm

if that's no good do a GOOGLE lookup for WAV Format specification  That should get you on the right track.
0
 

Author Comment

by:sasabistrovic
Comment Utility
So, Wav file is structured from chunks :

Format Chunk,
Data Chunk,
Cue Chank,
Playlist Chunk,
Associated Data List,
Sampler Chunk and
Instrument Chunk.

How to extract them from Wav file and modify them ?

I read that in Wav file are sample points that are meant to be "played" simultaneously are collectively called a sample frame ?
So there are in Sampler Chunk ?
How to modify them to get a new sound ?

Thanks.
0
 
LVL 4

Expert Comment

by:Colin_Dawson
Comment Utility
Now you're asking a completely different question from the one that you originally asked.
0
 

Author Comment

by:sasabistrovic
Comment Utility
Because I open (hex) and save back Wav file with Colin Dawson comment I'll give all experts points to him.

Thanks.
0
 
LVL 4

Expert Comment

by:Colin_Dawson
Comment Utility
Thanks for the points.
I'm sure if you start a new question there are experts that will knowledgable about the inner workings of the wav format.
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Suggested Solutions

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now