音频格式解析库使用
一、前言
在需要播放音频时,需要一个通用的、跨平台的方案。我这里采用的是OpenAL+主流音频格式解析。本篇文章主要讲述wav、ogg、flac、minimp3的使用,其中wav未使用第三方库。
我的完整代码仓库:dl/system/dl_audio_loader.h · 略游/dl - 码云 - 开源中国
二、环境准备
ogg库、flac库:Xiph.org: Downloads
需要下载 libogg和 libvorbis。需要下载 libflac。
minimp3:GitHub - lieff/minimp3: Minimalistic MP3 decoder single header library
需要 minimp3.h和 minimp3_ex.h两个头文件。
三、接口封装
定义AudioLoader类,用于命名分类。PCM为音频引擎需要的数据(例如OpenAL、XAudio2等)。WAVEFormat为wav格式需要的定义。
/**
* @file dl_audio_loader.h
* @brief 加载音频文件
*
*
* @version 1.0
* @author lveyou
* @date 22-08-26
*
* @note 支持格式:wav、ogg、flac、mp3
*/
#pragma once
#ifndef DL_DISABLE_AUDIO
#include <string>
#include "memory/dl_buffer.h"
namespace dl
{
class AudioLoader
{
public:
struct PCM
{
int _numChannel;//通道数 1,2 AL_FORMAT_MONO8,AL_FORMAT_STEREO8
int _bitPerSample;//采样数 8,16
Buffer _buf;
size_t _freq;//采样率
};
static bool ReadWav(std::string_view path_name, PCM& pcm);
static bool ReadOgg(std::string_view path_name, PCM& pcm);
static bool ReadFlac(std::string_view path_name, PCM& pcm);
static bool ReadMp3(std::string_view path_name, P