A. 用C語言怎麼編寫音樂播放器
一.在程序中直接播放聲音文件
在VC++ 中的多媒體動態連接庫中提供了一組與音頻設備有關的函數。利用這些函數可以方便地播放聲音。最簡單的播放聲音方法就是直接調用VC++中提供的聲音播放函數BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中參數lpszSound是需要播放聲音的.W***文件的路徑和文件名, hmod在這里為NULL,fuSound是播放聲音的標志,詳細說明請參考VC++中的幫助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT );如果沒有找到music.wav文件,第一種格式將播放系統默認的聲音,第二種格式不會播放系統默認的聲音。
二.將聲音文件加入到程序中
在VC++的程序設計中,可以利用各種標準的資源,如點陣圖,菜單,對話框等。同時VC++也允許用戶自定義資源,因此我們可以將聲音文件作為用戶自定義資源加入程序資源文件中,經過編譯連接生成EXE文件,實現無.W***文件的聲音播放。要實現作為資源的聲音文件的播放,首先要在資源管理器中加入待播放的聲音文件。
具體步驟入下:
1.獲得包含資源的模塊句柄:
HMODULE hmod=AfxGetResourceHandle();
2.檢索資源塊信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_W***E1),_T("W***E"));
3. 裝載資源數據並加鎖:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放聲音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.釋放資源句柄:
FreeResource(hGlobalMem);
B. 用c語言編寫音樂播放器
我想樓主實際上是想編寫一個我們平常所看到的app,應用軟體之類的程序專。最開始學編屬程,我想每個人都有這樣的疑問,為什麼我寫的只是,一個黑框框。實際上,一般情況下,一般情況下,沒有人用C語言編寫那種圖形化界面的軟體。因為實在是開發效率太低了,也就是要寫的代碼太多了,也沒有多大意義。C語言是面向過程的語言。所以一般只是用於編寫底層之類的程序。而我們實際應用於編寫那種圖形化界面的軟體,一般用的都是使用的面向對象的語言,就是Java,c#,這之類的語言。如果樓主,是想要快速能夠寫那種軟體的話,樓主應該學C#,學c一般都只是為了入門,一般除了特殊的領域之外,基本上都是用的C#這之類的面向對象語言。
C. 51單片機音樂播放器c程序
先將樂曲做一次AD轉換,轉成一個數組,然後將數組寫進C程序中,燒入單片機,播放的時候在做一次DA轉換,將轉換後的信號進行功放再通過喇叭就能播放了。
D. 怎麼用C語言編寫簡單的歌曲播放器
很簡單的。
計算機發聲原理:
聲音有三個特性:響度、音調、音色。
響度,這個非常好理解。就是我們感覺到的聲音的大小。具體點說就是由「振幅」決定,振幅越大響度越大。一般計量響度的單位是分貝,dB。
音調,這個就是聲音的高低,由「頻率」決定,頻率越高音調越高。頻率單位是赫茲,符號Hz。
音色,在生活當中,我們會發現各種物品發出的聲音的特點是不一樣的,如二胡和笛子。聲音的特性就是音色。而決定聲音的音色是由於物體本身的材料、結構。
對於我們的計算機而言。發聲的設置都是固定了的。要麼要計算機上的那個喇叭,那麼是外接的音響等。
現在這里對計算機上的那個喇叭用Turbo C 2.0進行編程,使之發出動聽的音樂《梁祝》。
第一步:定義《梁祝》的每一個音符的頻率和時間,將定義好的頻率和時間寫入文件或者保存在數組裡面。如果僅僅是寫一兩個程序自己玩玩的話,那直接保存在數組裡面就可以了。如果你想自己寫個播放器的話,那你先自己定義一種音樂格式文件(類似.mp3、.wav這種文件,這里暫時把這個文件定為.mymusic),將《梁祝》每個音符的頻率、時間寫入這個自定義的音樂格式文件liangzhu.mymusic。
第二步:完成了liangzhu.mymusic文件的定義後,我們要做的事情就是讀文件,控制喇叭發聲。這個具體可以參照現有的資料。這里需要事先寫幾個函數,讀文件的函數,暫停函數,頻率對照函數等等。
第三步,將上面的程序鏈接起來,就OK了。
將上面的步驟優化下,一個DIY的音樂播放器就成功了。
我上面說的只是控制了聲音的頻率和時間,其實還可以控制響度。對於一些特殊的設備,控制音色也不是不可能。
這種程序我在大一的時候寫過。現在想起來不難的。
主要是對C語言是否熟練,當然,你想要實現一個播放器,那你途中會遇到很多困難的。
祝你好運!
E. 51單片機c語言如何實現音頻播放
一般使用語音晶元;
也可以控制蜂鳴器,不過那個效果慘不忍聞;
F. c語言編寫音樂播放器
這個不用你寫,直接調用操作系統給出的函數就可以了,其實就是API,大多程序都是這樣寫出來的,自己去查微軟音樂媒體播放方面的API吧
G. 用C語言編寫音樂播放器的代碼
vc6.0下編譯可以的
#include <windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")
#define ID_PLAY 1000
#define ID_STOP 1001
#define ID_EXIT 1002
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TCHAR clsName[] = TEXT ("clsMusicPlayer");
TCHAR title[] = TEXT ("Music Player");
WNDCLASS wc;
HWND hWnd;
MSG msg;
int cxScreen;
int cyScreen;
int winX;
int winY;
int winWidth;
int winHeight;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
wc.hCursor = LoadCursor (hInstance, IDC_ARROW);
wc.hIcon = LoadIcon (hInstance, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = clsName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
if ( !RegisterClass (&wc) )
{
MessageBox (NULL, TEXT ("RegisterClass Error"), TEXT ("ERROR"), MB_OK | MB_ICONINFORMATION);
return -1;
}
cxScreen = GetSystemMetrics (SM_CXSCREEN);
cyScreen = GetSystemMetrics (SM_CYSCREEN);
winWidth = cxScreen / 4;
winHeight = cyScreen / 3;
winX = (cxScreen - winWidth) / 2;
winY = (cyScreen - winHeight) / 2;
hWnd = CreateWindow (
clsName, title,
WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX,
winX, winY, winWidth, 100,
NULL, NULL, hInstance, NULL);
if ( !hWnd )
{
MessageBox (NULL, TEXT ("CreateWindow Error"), TEXT ("ERROR"), MB_OK | MB_ICONINFORMATION);
return -2;
}
ShowWindow (hWnd, SW_SHOW);
UpdateWindow (hWnd);
while ( GetMessage (&msg, NULL, 0, 0) > 0 )
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
int PlayMusic ()
{
HANDLE hFind;
WIN32_FIND_DATA findFileData;
static TCHAR szPath[1024] = TEXT (".\\*.wav");
hFind = FindFirstFile (szPath, &findFileData);
if ( hFind != INVALID_HANDLE_VALUE )
{
//MessageBox (NULL, findFileData.cFileName, "", 0);
PlaySound (findFileData.cFileName, NULL, SND_FILENAME | SND_ASYNC);
while ( FindNextFile (hFind, &findFileData) )
{
//MessageBox (NULL, findFileData.cFileName, "", 0);
PlaySound (findFileData.cFileName, NULL, SND_FILENAME | SND_ASYNC);
}
}
else
{
MessageBox (NULL, "沒找到文件", "", 0);
}
return 1;
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDc;
PAINTSTRUCT ps;
HINSTANCE hInst;
RECT rect;
switch ( message )
{
case WM_CREATE:
{
GetClientRect (hWnd, &rect);
hInst = ((LPCREATESTRUCT)lParam)->hInstance;
CreateWindow (
"button",
TEXT ("播放"),
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
rect.right / 10, rect.bottom / 10, 40, 25, hWnd, (HMENU)ID_PLAY, hInst, NULL);
CreateWindow (
"button",
TEXT ("停止"),
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
rect.right / 10 + 50, rect.bottom / 10, 40, 25, hWnd, (HMENU)ID_STOP, hInst, NULL);
CreateWindow (
"button",
TEXT ("退出"),
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
rect.right / 10 + 100, rect.bottom / 10, 40, 25, hWnd, (HMENU)ID_EXIT, hInst, NULL);
}
break;
case WM_COMMAND:
{
switch ( HIWORD (wParam) )
{
case BN_CLICKED:
{
switch ( LOWORD (wParam) )
{
case ID_PLAY:
{
PlayMusic ();
//PlaySound (TEXT ("D:\\音頻文件\\1.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
}
break;
case ID_STOP:
{
PlaySound (NULL, NULL, SND_FILENAME);
}
break;
case ID_EXIT:
{
SendMessage (hWnd, WM_CLOSE, 0, 0);
}
break;
}
}
break;
}
}
break;
case WM_PAINT:
{
hDc = BeginPaint (hWnd, &ps);
EndPaint (hWnd, &ps);
}
break;
case WM_CLOSE:
{
PostQuitMessage (0);
}
break;
case WM_DESTROY:
{
DestroyWindow (hWnd);
}
break;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}
H. 用單片機C語言實現音樂播放器功能
先鍵盤掃描,找到鍵
然後根據按鍵在代碼里找到對應的頻率
然後把頻率輸出,就可以發聲了。
I. 求單片機 音樂播放的c代碼
一般說來,單片機配合外接的蜂鳴器可以發出基本的單音頻率。由於蜂鳴器發出的聲音不包含相應幅度的諧波頻率,因此採用這種方法不能演奏出多種音色的聲音。使用單片機配合蜂鳴器來發音,只需弄清楚兩個概念即可,也就是「音調」和「節拍」。其中,音調表示一個音符唱多高的頻率;節拍表示一個音符唱多長的時間。下面分別介紹音調和節拍的相關知識,以及如何使用單片機來實現音調和節拍。
節拍表示一個音符唱多長的時間,其同樣是音樂學中的名詞。在一張完整樂譜的開頭,都有如1=C 、1=G …… 等的標識。例如1=G 的節拍示意圖。
這里的、用來表示節拍,而1=C、1=G表示一個樂譜的曲調,簡單地說就是跟音調有關系。
前面介紹了基本音符的音調和節拍,並詳細講解了如何在單片機系統中來實現一個基本的音符。在單片機上實現音樂播放,一般只需逐個播放音符即可。用單片機播發音樂的方法如下:
(1)初始化單片機定時器;
(2)將樂譜中的每個音符的音調及節拍變換成相應的音調參數和節拍參數;
(3)將樂譜中音符的參數做成數據表格,存放在存儲器中;
(4)通過程序取出一個音符的相關參數,驅動蜂鳴器播放該音符;
(5)該音符唱完後,接著取出下一個音符的相關參數……,如此直到播放完畢最後一個音符,根據需要也可循環不停地播放整個樂曲。
#include <reg51.h>
sbit Y=P1^3; //播放按鍵
sbit Speaker=P3^7; //揚聲器
static unsigned char bdata StateREG;
sbit m=StateREG^0;
unsigned char code * data Mymusic;
unsigned char data l;
void delay(void); //延時函數聲明
unsigned char code music[30]=
{0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85};
unsigned char code Mmusic[]=
{
0x35,0x31,0x34,0x34,0x24,0x35,0x32,0x32,0x24,0x38,
0x44,0x58,0x48,0x34,0x31,0x34,0x34,0x24,0x38,0x34,
0x7F,0x32,0x34,0x32,0x34,0x24,0x38,0x34,0x24,0x38,
0x43,0x58,0x48,0x34,0x32,0x34,0x38,0x24,0x38,0x34,
0x7F,0x16,0x4C,0x74,0x78,0x64,0x54,0x48,0x54,0x64,
0x58,0x44,0x34,0x24,0x38,0x24,0x14,0x12,0x21,0x14,
0x78,0x68,0x3F,0x4C,0x74,0x78,0x64,0x52,0x42,0x48,
0x53,0x64,0x58,0x44,0x34,0x24,0x38,0x24,0x24,0x38,
0x44,0x58,0x48,0x3C,0xFF
};
//主程序
void main()
{
unsigned int data j;
unsigned char data i;
unsigned char data k;
unsigned char data p11;
unsigned char data p33;
TMOD=0x01; //初始化
IE=0x82;
while(1)
{
j=0;
m=0;
while(Y==1)
{
for(i=0;i<5;i++)
{
delay(); //延時
}
p11=P1;
p33=P3;
while(*(Mmusic+j)!=0xFF)
{
k=*(Mmusic+j)&0x0F;
l=*(Mmusic+j)>>4;
if((p11!=P1)||((p33&0x0f)!=(P3&0x0f)))
{
goto Next;
}
TH0=music[2*l];
TL0=music[2*l+1];
TR0=1;
if ((music[2*l]==0xff)&&(music[2*l+1]==0xff))
{
TR0=0;
}
for(i=k;i>0;--i)
{
delay();
}
TR0=0;
j++;
}
Next: ;
}
}
}
/*單個音符的發聲*/
void timer0() interrupt 1 using 1
{
TH0=music[2*l];
TL0=music[2*l+1];
Speaker = !Speaker;
}
/*匯編語句進行精確延時,延時1/4拍時間即187ms*/
void delay(void)
{
#pragma ASM
MOV R3,#02H
D1: MOV R2,#7DH
D2: MOV R1,#0F8H
DJNZ R1,$
DJNZ R2,D2
DJNZ R3,D1
#pragma ENDASM
}