SDL2.0超简单入门 100行代码实现播放wav声音文件
生活随笔
收集整理的這篇文章主要介紹了
SDL2.0超简单入门 100行代码实现播放wav声音文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sdl主要用圖形界面顯示及播放聲音,本人剛剛接觸sdl,寫了個簡單的入門程序,實現播放聲音文件,現分享一下當做個筆記。
// sound2.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" extern "C" {//SDL#include "sdl/SDL.h"#include "sdl/SDL_thread.h"#pragma comment(lib, "lib\\SDL2main.lib")#pragma comment(lib, "lib\\SDL2.lib") }; #include <iostream> using namespace std;#define SOUND_DATA_LEN 409600//samples*channel*2byte=4096的倍數//音頻數據結構 typedef struct SoundData {Uint8 buffer[SOUND_DATA_LEN];//數據緩存Uint8 *position;//緩存當前播放指針Uint32 length;//待播放的緩存長度 }SoundData;//SDL 2.0 //播放回調 void fill_audio(void *udata, Uint8 *stream, int len) { SoundData* sd = (SoundData*)udata;SDL_memset(stream, 0, len);//緩存數據已播放完畢if(sd->length <= 0){return;}//緩存中能播放最大的長度len = len > sd->length ?sd->length : len;//將數據混合至聲卡設備SDL_MixAudio(stream, sd->position, len, SDL_MIX_MAXVOLUME);sd->position += len;//當前播放位置更新sd->length -= len;//緩存剩余長度更新 }int _tmain(int argc, _TCHAR* argv[]) {char *file_name = "Sweety - 櫻花草.wav";//只支持.wav文件//聲音緩存結構SoundData sd;//步驟(1)設置音頻信息//SDL 2.0 Support for multiple windowsSDL_AudioSpec wanted_spec;wanted_spec.freq = 44100;//44.1KHz采樣率wanted_spec.format = AUDIO_S16SYS;//采樣數據格式wanted_spec.channels = 2;//2聲道wanted_spec.silence = 0;//靜音時大小wanted_spec.samples = 1024;//每次播放長度1024*2channels*2bytewanted_spec.callback = fill_audio;//設置播放回調函數wanted_spec.userdata = &sd;//傳遞數據給回調函數//步驟(2)打開音頻設備if (SDL_OpenAudio(&wanted_spec, NULL)<0){ printf("can't open audio.\n"); goto end; }FILE* file = fopen(file_name, "rb");if(!file){cout<<"無法打開聲音文件:"<<file_name<<endl;goto end;}int count = 0;//文件幀數int len = 0;//能讀文件數據長度//步驟(3)開始播放SDL_PauseAudio(0);//循環讀文件數據至緩存while(len = fread(sd.buffer, 1, SOUND_DATA_LEN, file)){sd.length = len;//Audio buffer lengthsd.position = sd.buffer;//存存數據未播放完等待while(sd.length>0){SDL_Delay(1);}printf("文件幀:%03d\n", count++);}end:fclose(file);//步驟(4)退出SDL_Quit();system("pause");return 0; }總結
以上是生活随笔為你收集整理的SDL2.0超简单入门 100行代码实现播放wav声音文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国计算机一级模拟软件安装教程
- 下一篇: win10系统安装提示带有gui的服务器