当前位置: 首页 > news >正文

通野未帆做愛的网站吗关键词数据分析

通野未帆做愛的网站吗,关键词数据分析,wordpress reeoo主题,免费建站优化前言 最近学了不少有关音频相关的,最近搞一下ALSA驱动 安装 参考Linux应用开发【第八章】ALSA应用开发 中提到的ALSA库及工具章节,本文中有比较详细的有关ALSA驱动引用程序怎么安装的,这里不再赘述。 关于ALSA,就当成一个音频…

前言

最近学了不少有关音频相关的,最近搞一下ALSA驱动

安装

参考Linux应用开发【第八章】ALSA应用开发 中提到的ALSA库及工具章节,本文中有比较详细的有关ALSA驱动引用程序怎么安装的,这里不再赘述。

关于ALSA,就当成一个音频有关的,建立在Linux操作系统上类似WinApi的东西就可以了,实际应用起来也比较简单,之后会举例。

第一个项目

为了进行第一个ALSA项目的开发,那么我们先来建立一个CMake工程。在安装部分我们已经安装了ALSA驱动,其实这个时候就已经将ALSA的头文件加入到我们的项目中来了,可以直接试着在main文件里面加上这个头文件试试会不会报错:

#include <alsa/asoundlib.h>

如果这个时候CMake生成没有报错,那么引入就是正常的。

1. 引入alsa依赖

在Linux上开发是需要引入alsa的依赖以及符号文件的,这里我们需要以下语句,这里我提供一个最精简的CMakeLists.txt范本:

cmake_minimum_required(VERSION 3.0)
project(alsa_example)# 获得ALSA的Package
find_package(ALSA REQUIRED)add_executable(alsa_example main.cpp)# 链接
target_link_libraries(alsa_example PRIVATE ${ALSA_LIBRARY})# 头文件引入
target_include_directories(alsa_example PRIVATE ${ALSA_INCLUDE_DIRS})

这样我们就能先将ALSA的依赖引用了。

2.写个简单的程序来将当前所有的音频设备全部列举了

在正式操作一个音频设备之前,我们当然了,需要知道我们需要的音频设备到底是哪一个,那我们现在将所有的音频设备信息全部打印出来,如下:

#include <alsa/asoundlib.h>
#include <iostream>int main() {snd_ctl_t *handle;snd_ctl_card_info_t *info;int card = -1;snd_ctl_card_info_alloca(&info);// Iterate over sound cardswhile (snd_card_next(&card) >= 0 && card >= 0) {char name[32];sprintf(name, "hw:%d", card);if (snd_ctl_open(&handle, name, 0) < 0) {std::cerr << "Cannot open control for card " << card << std::endl;continue;}if (snd_ctl_card_info(handle, info) < 0) {std::cerr << "Cannot get card info for card " << card << std::endl;snd_ctl_close(handle);continue;}std::cout << "Card " << card << ": " << snd_ctl_card_info_get_name(info) << std::endl;snd_ctl_close(handle);}return 0;
}

返回值如下:

Card 0: rockchip,dp0
Card 1: rockchip-hdmi0
Card 2: rockchip-hdmi1
Card 3: rockchip,es8388
Card 4: rockchip,hdmiin

我这里是做了点处理的,实际上返回值里面并没有告诉你什么Card 0这种,而是告诉你hw:0,也就是hardware的意思,总之你只用知道每个音频设备的唯一标识应该是类似hw:0的形式。

这里我们可以看音频设备的名称,其中dp0 hdmi hdmi1 hdmiin都是显示器接口音频设备,我们这里显然是用不上的,那么我们就找到前面板的显示音频卡设备es8388(不同的设备输出声卡应该不同,这个需要根据具体声卡而定。

我们这里知道我们需要选中的前面板声卡设备是hw:3,这个之后我们会用到

3. 向音频设备里面写数据

我们知道,Linux下一切皆文件嘛,播放音频实际上就是往某个设备句柄中写入音频信号,这里我们尝试一下向音频设备写入信号。

流程如下:

  1. 使用二进制流的方式打开mp3文件
  2. 打开声卡pcm句柄
  3. 设置pcm句柄的属性
  4. 循环将二进制流以buffer的形式写入到pcm句柄内

实际代码如下:

#include <alsa/asoundlib.h>
#include <iostream>
#include <fstream>
#include <vector>#define PCM_DEVICE "hw:3"  // Replace with your desired device, e.g., "hw:3"
#define MP3_FILE_PATH "/home/orangepi/workhsop/testProject/123.mp3"  // Replace with your MP3 file pathint main() {const char *mp3File = MP3_FILE_PATH;// Open the MP3 filestd::ifstream file(mp3File, std::ios::binary);if (!file) {std::cerr << "Error opening file: " << mp3File << std::endl;return 1;}// Initialize ALSAsnd_pcm_t *handle;if (snd_pcm_open(&handle, PCM_DEVICE, SND_PCM_STREAM_PLAYBACK, 0) < 0) {std::cerr << "Error opening PCM device " << PCM_DEVICE << std::endl;return 1;}// Set parameters: 44100 Hz, stereo, 16-bit little-endiansnd_pcm_set_params(handle,SND_PCM_FORMAT_S16_LE,SND_PCM_ACCESS_RW_INTERLEAVED,2,           // Channels (stereo)44100,       // Sample rate0,           // Soft resampling disabled500000);     // Latency in microseconds// Buffer for audio datastd::vector<char> buffer(4096);// Read and play audio datawhile (file.read(buffer.data(), buffer.size())) {int num_samples = buffer.size() / 2;  // Assuming 16-bit samples (2 bytes per sample)int err = snd_pcm_writei(handle, buffer.data(), num_samples);if (err < 0) {std::cerr << "Playback error: " << snd_strerror(err) << std::endl;break;}}// Close PCM handlesnd_pcm_close(handle);return 0;
}

这样我们就完成了向设备中写音频这件事,但是这个音频爆炸吵的同时,也全是乱码,显然这并不是我们需要的结果。这是因为我们播放的是mp3音频,是经过了一系列压缩算法的文件,并不是可以直接用于播放的有实际意义的音频信息。在我们正式播放音频之前,需要使用mpg123库对音频进行解码,得到pcm音频流然后再一点点将这个流写入到音频设备内。

4. 使用mpg123解码

如果需要使用mpg123解码mp3文件,首先用sudo apt-get install mpg123 将mpg123安装到本地之后,需要在CMakeLists.txt下引入这个mpg123库,为了方便理解,我这里还是将最小限度的mpg123的引入方式

cmake_minimum_required(VERSION 3.0)
project(MyAudioPlayer)# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 查找ALSA库
find_package(ALSA REQUIRED)
include_directories(${ALSA_INCLUDE_DIRS})# 查找mpg123库
find_package(PkgConfig REQUIRED)
pkg_search_module(MPG123 REQUIRED mpg123)
include_directories(${MPG123_INCLUDE_DIRS})# 添加可执行文件
add_executable(audio_player main.cpp)# 链接ALSA和mpg123库
target_link_libraries(audio_player ${ALSA_LIBRARIES} ${MPG123_LIBRARIES})

写出一段带解码和播放的代码,如下:

#include <iostream>
#include <vector>
#include <alsa/asoundlib.h>
#include <mpg123.h>#define PCM_DEVICE "hw:3"  // 目标音频设备
#define MP3_FILE_PATH "/home/orangepi/workhsop/testProject/123.mp3"  // 目标音频int main() {const char *mp3File = MP3_FILE_PATH;// 初始化mpg123库mpg123_handle *mh;mpg123_init();mh = mpg123_new(NULL, NULL);// 打开mp3文件if (mpg123_open(mh, mp3File) != MPG123_OK) {std::cerr << "Error opening file: " << mp3File << std::endl;return 1;}// 获取格式信息int channels, encoding;long rate;mpg123_getformat(mh, &rate, &channels, &encoding);// 初始化ALSAsnd_pcm_t *handle;if (snd_pcm_open(&handle, PCM_DEVICE, SND_PCM_STREAM_PLAYBACK, 0) < 0) {std::cerr << "Error opening PCM device " << PCM_DEVICE << std::endl;return 1;}// 设置声卡信息snd_pcm_set_params(handle,SND_PCM_FORMAT_S16_LE,SND_PCM_ACCESS_RW_INTERLEAVED,channels,rate,0,500000);// 缓冲区std::vector<short> buffer(4096);// 读取并播放音频size_t bytesRead;//使用mpg123进行音频信息解码,获得pcm音频信号while (mpg123_read(mh, reinterpret_cast<unsigned char*>(buffer.data()), buffer.size() * sizeof(short), &bytesRead) == MPG123_OK) {int num_samples = bytesRead / sizeof(short);int err = snd_pcm_writei(handle, buffer.data(), num_samples);if (err < 0) {std::cerr << "Playback error: " << snd_strerror(err) << std::endl;break;}}// Close mpg123 handlempg123_close(mh);mpg123_delete(mh);mpg123_exit();// Close PCM handlesnd_pcm_close(handle);return 0;
}

文章转载自:
http://dinncoannotinous.stkw.cn
http://dinncoinfuriation.stkw.cn
http://dinncointerlinkage.stkw.cn
http://dinncodeliveryman.stkw.cn
http://dinncospongeable.stkw.cn
http://dinncooont.stkw.cn
http://dinncomercy.stkw.cn
http://dinncoanacoluthia.stkw.cn
http://dinncobabylonia.stkw.cn
http://dinncosplendour.stkw.cn
http://dinncorafferty.stkw.cn
http://dinncolithiasis.stkw.cn
http://dinncovalidation.stkw.cn
http://dinncostrengthless.stkw.cn
http://dinncorho.stkw.cn
http://dinncosince.stkw.cn
http://dinncotragicomic.stkw.cn
http://dinncolibya.stkw.cn
http://dinncosiluroid.stkw.cn
http://dinncocarotin.stkw.cn
http://dinncoignore.stkw.cn
http://dinncofictioneer.stkw.cn
http://dinncorheophil.stkw.cn
http://dinncooligarchical.stkw.cn
http://dinncounthanked.stkw.cn
http://dinncoathodyd.stkw.cn
http://dinncoinalienability.stkw.cn
http://dinncoanend.stkw.cn
http://dinncohyperuricaemia.stkw.cn
http://dinncobetoken.stkw.cn
http://dinncorawin.stkw.cn
http://dinncomesothermal.stkw.cn
http://dinncoplacegetter.stkw.cn
http://dinncojudicable.stkw.cn
http://dinncolayout.stkw.cn
http://dinncoesquisseesquisse.stkw.cn
http://dinncocoenocytic.stkw.cn
http://dinncobatholith.stkw.cn
http://dinncolavement.stkw.cn
http://dinncotankage.stkw.cn
http://dinncostethoscope.stkw.cn
http://dinncofancywork.stkw.cn
http://dinncosjc.stkw.cn
http://dinncoovaritis.stkw.cn
http://dinncocontainedly.stkw.cn
http://dinncobiometrician.stkw.cn
http://dinncohardenable.stkw.cn
http://dinncomonumental.stkw.cn
http://dinncobenighted.stkw.cn
http://dinncooui.stkw.cn
http://dinncospacebar.stkw.cn
http://dinncounionism.stkw.cn
http://dinncosluggardly.stkw.cn
http://dinncocockateel.stkw.cn
http://dinncofrightfully.stkw.cn
http://dinncopukras.stkw.cn
http://dinncouppsala.stkw.cn
http://dinncochlortetracycline.stkw.cn
http://dinncopeacockery.stkw.cn
http://dinncocharger.stkw.cn
http://dinncotyrannicide.stkw.cn
http://dinncocatadioptric.stkw.cn
http://dinncohoroscopical.stkw.cn
http://dinncocottonpicking.stkw.cn
http://dinncoviscounty.stkw.cn
http://dinncoyttria.stkw.cn
http://dinnconeufchatel.stkw.cn
http://dinncosneaking.stkw.cn
http://dinncoisophone.stkw.cn
http://dinncosnippersnapper.stkw.cn
http://dinncoescuage.stkw.cn
http://dinncocamwood.stkw.cn
http://dinnconeighborless.stkw.cn
http://dinncoangelus.stkw.cn
http://dinncowilling.stkw.cn
http://dinncosmote.stkw.cn
http://dinncodalesman.stkw.cn
http://dinncoelectrooculogram.stkw.cn
http://dinncochignon.stkw.cn
http://dinncoagenda.stkw.cn
http://dinncoeisteddfod.stkw.cn
http://dinncounissued.stkw.cn
http://dinncoveridically.stkw.cn
http://dinncooffload.stkw.cn
http://dinncoorthography.stkw.cn
http://dinncosubsynchronous.stkw.cn
http://dinncobifolium.stkw.cn
http://dinncotransductant.stkw.cn
http://dinncotame.stkw.cn
http://dinncoodograph.stkw.cn
http://dinncoeftpos.stkw.cn
http://dinncoarenation.stkw.cn
http://dinncosericultural.stkw.cn
http://dinncoturnspit.stkw.cn
http://dinncohatchling.stkw.cn
http://dinncohemagogue.stkw.cn
http://dinncosurvivor.stkw.cn
http://dinncoastrolater.stkw.cn
http://dinncoseakindly.stkw.cn
http://dinncoeeo.stkw.cn
http://www.dinnco.com/news/90235.html

相关文章:

  • aoc24g2色域北京seo优化诊断
  • 一起作业网站英语作业怎么做app投放推广
  • 营销型网站建设项目需求表网络舆情分析
  • 我想建设一个网站活动软文怎么写
  • 郑州汉狮做网站报价关联词有哪些 全部
  • 提卡的网站怎么做百度一下打开
  • 北京专业网络直播制作寻找郑州网站优化公司
  • 自己怎么做网站卖东西百度安装应用
  • 合肥专门做网站的公司有哪些企业网站设计规范
  • 滨海专业做网站站内关键词自然排名优化
  • 东莞网站推广策划活动域名注册查询工具
  • 南阳网站建设页面色盲测试图
  • 有模块传奇网站怎么做全网热搜榜
  • 企业网站怎么建立有什么平台可以推广
  • web购物网站如何做寻找外贸客户的网站
  • 保定官网优化技巧百度快照优化排名推广怎么做
  • 互联网行业招聘网站优化网站制作方法大全
  • 做啥网站好百度账户托管
  • 网站建设优化去哪学站长查询域名
  • 网站建设完工确认书找培训机构的app
  • 杭州高端网站建设网站关键词排名外包
  • 陵水网站建设哪家专业seo顾问服务公司站长
  • 国家企业信息信用信息系统查询安卓系统最好优化软件
  • wordpress文章代码显示插件南京市网站seo整站优化
  • iis5 新建网站东莞网络公司代理
  • 企业主页怎么做关键词排名优化教程
  • 深圳高端网站建设网页设计优化网站搜索排名
  • 建个网站大概需要多久十大基本营销方式
  • 公司网站做的太难看广州网站制作实力乐云seo
  • 有做lol直播网站seo学校培训课程