[ Helionprime @ 24.01.2009. 14:16 ] @
Pozz. Hoću da mi program kad se pokrene, da pusti pjesmu. I to ne tako da pozove Winamp ili mediaplayer.
Ja sam otkucao nešto i sad mi treba pomoć.
Radim u DevCpp-u.
Evo konkretna pitanja:

1. Pjesma radi 30-ak sekundi i prekine. Hoću da završi do kraja
2. Hoću da kontrolišem jačinu zvuka jer je po defaultu na maksimumu.
3. Šta treba da se uradi da bi se umjesto wav fajla koristio mp3

Code:

#include <windows.h>
#include <stdlib.h>
//linkovao sam winmm.a
main ()
{
     
   
     
     PlaySound("0.wav",0, SND_FILENAME);  // PlaySound("0.wav",0, SND_FILENAME|SND_ASYNC); će da otpjeva
                                          // čitavu pjesmu, ali ovom slučaju SND_ASYNC čeka sljedeći PlaySound
                                          // poziv i samim tim preskače o.wav i pusta 1.wav
    PlaySound("1.wav",0, SND_FILENAME);
     system("pause");
         
         }
// ne može jednostavnije :)


i ako neko ima ideju: Kako da se pjesma uključi unutar programa, a ne da bude externi fajl?

[Ovu poruku je menjao Helionprime dana 24.01.2009. u 15:50 GMT+1]

[Ovu poruku je menjao Helionprime dana 25.01.2009. u 11:44 GMT+1]
[ Helionprime @ 25.01.2009. 10:43 ] @
Ima li ikoga. Pa nije valjda da sam jedini koji ovo radi. !!???

Uspio sam da riješim ovo što pjeva 30-ak sekundi. Sad radi čitava pjesma, ali troši 100% procesora, i to nije ono što sam htio postići !!! (" ali radi ")

Uspio sam da ubacim pjesme unutar exe fajlova, tako da više nisu lokalni fajlovi. (s tim da je exe fajl 150 MB i treba 3 minuta da se kompajlira , jer je wav fajl u pitanju a ne mp3 )

__________________________________

Zna li neko odgovor na drugo i treće pitanje ..
[ itf @ 25.01.2009. 10:52 ] @
Koristi funkciju mciSendString i njome ćeš moći reproducirati i mp3 datoteke i mnoge druge.

http://www.apitalk.com/document.php?id=1184208002_1
[ Helionprime @ 25.01.2009. 12:16 ] @
I negde sam pročitao da mciSendString ne može da reprodukuje resource fajlove.

Code:

//RESOURCE.H

#ifndef RESOURCE_H
#define RESOURCE_H
#define MUSIC 9001
#define MUSIC1 9002


#endif


Code:

//RESOURCE.RC
#include "resource.h"
MUSIC MPEGVIDEO "3.mp3"
MUSIC1 WAVE "0.wav"


Kako da reprodukujem ove fajlove "0.mp3" i "3.mp3" ( ili ipak moraju biti lokalni fajlovi )

[Ovu poruku je menjao Helionprime dana 25.01.2009. u 13:30 GMT+1]

[Ovu poruku je menjao Helionprime dana 25.01.2009. u 15:32 GMT+1]
[ deerbeer @ 25.01.2009. 12:25 ] @
Pogledaj ovde :
http://msdn.microsoft.com/en-us/library/ms712876(VS.85).aspx
[ Helionprime @ 25.01.2009. 12:36 ] @
DearBear, znam za to. To sam i uradio sa PlaySound.
Problem je što se u tom slučaju koriste wave fajlovi (a imam ih 4 - 5) i kad ih sve potrpam u resource dobije se gigantski exe fajl.
Iz tog razloga želim da u resource stavim mp3.

Odustao sam od PlaySound-a. Zato pitam da li mciSendString može da čita resource ?
[ mmix @ 25.01.2009. 12:50 ] @
mozes i da iskoristis DirectX Sound. Izvini za namespace, nisam video da je cpp forum, ali svejedno mozes directx audio da koristis i iz C++a.









[Ovu poruku je menjao mmix dana 25.01.2009. u 14:16 GMT+1]
[ Helionprime @ 25.01.2009. 14:00 ] @
Hvala mmix na prijedlogu. no ja sam još "noob" za te malo "vičnije" stvari. No u svakom slučaju hvala.

Koncentrisao sam se na ovo što mi je itf predložio. Završio sam kod koristeći mciSendString funkciju, jer sam uspio da pustim mp3 fajl, i mogu da reprodukujem pjesmu u cijeloj dužini, a da pri tome neznatno trošim resurse procesora.
Znači to mi se sviđa :)

Još samo treba da skontam da li mogu fajlovi da se upakuju u EXE . Znam neko će reći da sam dosadan, ali ovaj program mora da radi. Stoga ne smem da dozvolim da zbog slučajnog nestanka audio fajlova propadne sav trud.

[ itf @ 26.01.2009. 08:44 ] @
Mp3 se može staviti u exe preko resursa (RCDATA), no da bi ga tvoja aplikacija mogla koristiti prvo taj mp3 moraš extractirati iz EXE u neki temp.mp3 pa tek onda taj temp.mp3 "svirati". Najbolje ti je obaviti sva extractiranja odmah na početku programa (nekakav "loading" aplikacije), a kada aplikacija završi izbrisati sve extractirane datoteke.

Evo code-a iz Delphija:

Code:
procedure TForm1.Button2Click(Sender: TObject) ;
var
 rStream: TResourceStream;
 fStream: TFileStream;
 fname: string;
begin
 {this part extracts the mp3 from exe}
 fname := ExtractFileDir(Paramstr(0))+'Intro.mp3';
 rStream := TResourceStream.Create(hInstance, 'Intro', RT_RCDATA) ;
 try
  fStream := TFileStream.Create(fname, fmCreate) ;
  try
   fStream.CopyFrom(rStream, 0) ;
  finally
   fStream.Free;
  end;
 finally
  rStream.Free;
 end;
 {this part plays the mp3}
 MediaPlayer1.Close;
 MediaPlayer1.FileName:=fname;
 MediaPlayer1.Open;
end;


Ovdje je to prikazano kako se radi pomoću MediaPlayer komponente, dok ti koristi mciSendString ako već ne koristiš Delphi ili C++ Builder.
[ Mali Misha @ 26.01.2009. 09:04 ] @
Opravdano je pitanje neophodnosti slaganja mp3 fajla na disk, jer objekat taj fajl (nadam se) ionako učitava u memoriju pre izvođenja. Ukoliko je biblioteka otvorena, mogla bi da se izmeni da preuzme fajl i na načine koji bi izbegli eksplicitno snimanje fajla bilo gde.