使用音频引擎MITA给音频文件添加dsp音效源代码

手机APP开发之MIT Appinventor详细实战教程(二),实现音乐软件的编程 由于瘟疫肆虐,我在家中宅了好几天,简直不能太无聊。一个偶然的机会,我在抖音上面发现了一个类似钢琴的APP,然后就试着用App inventor做一个可以实现音乐功能的软件,暂且可以把它叫做木琴。经过3次的修改,最终成了下面的样子。让我们来一起看看吧! 一、简单的作品描述 基本界面如图1所示 功能介绍: 通过触摸屏幕上的彩色按钮播放八个不同的音符; 按“播放”按钮,回放之前... 阅读详情

#include "../../include/mita.h" /**< @brief MITA SDK Header */
#ifdef _DEBUG
#pragma comment(lib, "../../library/mitaD.lib")
#else
#pragma comment(lib, "../../library/mita.lib")
#endif

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

#pragma warning(push)
#pragma warning(disable:4996)

MITA_STATIC
MITA_INLINE
MITA_VOID
MITA_CheckError(MITA_VOID)
{
MITA_ERROR lastError = MITA_GetLastError();
if (lastError != MITA_ERROR_OK)
{
printf("ERROR: MITA Framework error with %u codes\n", lastError);
exit(lastError);
}
}

MITA_STATIC
MITA_INLINE
MITA_BYTE
MITA_EnterKey(MITA_VOID)
{
MITA_INT32 key = 0xFF;
do
{
if (kbhit())
{
key = getch();
break;
}
} while (1);
if (key >= 'a' && key <= 'z')
key -= 32;
return key;
}

//////////////////////////////////////////////////////////////////////////
//ChannelMask must has channel number in high 8 bits.
// | 00000000 | MMMMMMMM MMMMMMMM MMMMMMMM |
// Nums ChannelMask
//How to set number?
// MITA_CHNFMT_SetNum(Mask, 2)
//Also you can use MITA_GuessChannelMode.
//
// The channel number must equal with channel mask.
// ChannelMask = MITA_CP_FRONT_LEFT|MITA_CP_FRONT_RIGHT; //Use two speaker
// MITA_CHNFMT_SetNum(ChannelMask, 2); //Set 2
//
MITA_STATIC
MITA_INLINE
MITA_HOUTPUT
MITA_CreateDefaultOutput(MITA_HINSTANCE hInstance, MITA_DWORD ChannelMask)
{
MITA_HOUTPUT hOutput;
MITA_HDEVICE hDevice;
MITA_DEVICEPARAM Param;
MITA_SIZE i, n;
MITA_DEVICEINFO DevInfo;
MITA_BYTE Key = 'A';
MITA_DWORD Ids[10];
MITA_BYTE MaxIds = 0;

MITA_Ins_CreateObject(hInstance, &IID_DevWinMME, &hDevice);
MITA_CheckError();

MITA_Device_GetDeviceNums(hDevice, &n);
MITA_CheckError();

printf("\nSelect a output device: \n");
_try_again:
Key = 'A';
for (i = 0; i < n; i++)
{
MITA_Device_GetDevice(hDevice, i, &DevInfo);
MITA_CheckError();
if (DevInfo.Type == MITA_CT_OUTPUT)
{
Ids[Key - 'A'] = DevInfo.DevId;
printf("[%c] Device %s [%f - %f]\n", Key, MITA_Text_ToSystemS(DevInfo.DevName, MITA_TCT_DEFAULT), DevInfo.Latency[0], DevInfo.Latency[1]);
Key++;
MaxIds++;
}
}
Key = MITA_EnterKey() - 'A';
if (Key >= MaxIds)
{
printf("ERROR: Invalid input keys, please try again.\n");
goto _try_again;
}

Param.Callback = MITA_NULL;
Param.CallbackHandle = MITA_NULL;
Param.Customer = MITA_NULL; /**< @brief for future use */
Param.ChannelFmt.mask = ChannelMask; /**< @brief The mask of channels. */
Param.ChannelFmt.sfmt = MITA_SDT_F32; /**< @brief Float32 Sample */
Param.ChannelFmt.sps = 44100.0f; /**< @brief 44.1KHz */
Param.Latency = 0.1f; /**< @brief 100 ms latency */
Param.Type = MITA_CT_OUTPUT; /**< @brief For output. */
Param.DevId = Ids[Key]; /**< @brief The id of device */

MITA_Output_CreateByDevice(hInstance, hDevice, &Param, MITA_FALSE, &hOutput);
MITA_CheckError();

return hOutput;
}

MITA_STATIC
MITA_INLINE
MITA_VOID
MITA_PrintDecSupportExts(MITA_HINSTANCE hInstance)
{
MITA_HFACTORY DecFactory;
MITA_HOBJECTLIST DecList;
MITA_SIZE i, n, j, jn;
MITA_AFD afd;
MITA_HDECODER hDecoder;
MITA_Ins_GetFactory(hInstance, MITA_MT_DECODER, &DecFactory);
MITA_CheckError();
MITA_ObjectList_Build(hInstance, DecFactory, MITA_FALSE, &DecList);
MITA_CheckError();
MITA_ObjectList_Count(DecList, &n);
for (i = 0; i < n; i++)
{
MITA_ObjectList_Get(DecList, i, &hDecoder);
MITA_Decoder_GetFileDescribeNums(hDecoder, &jn);
for (j = 0; j < jn; j++)
{
MITA_Decoder_GetFileDescribe(hDecoder, j, &afd);
printf("%s;", MITA_Text_ToSystemS(afd.ext, MITA_TCT_DEFAULT));
}
}
printf("\n");
MITA_CloseHandle(DecList);
}

void main(void)
{
MITA_HINSTANCE gInstance = MITA_NULL;
MITA_CHAR szVersion[64];
MITA_SIZE PluginCount = 0;
MITA_HINPUT hItem1;
MITA_HOUTPUT hOutput;
MITA_HENGINE hEngine;
MITA_DWORD ChannelMask;
MITA_BYTE Key = 0;
MITA_TIME CurTime;
MITA_TIME DurTime;
MITA_DWORD cur_ms, dur_ms;
MITA_CHANNELFORMAT ChannelFmt;
MITA_STATUS Status;
MITA_HDSP hTestDSP;

printf(";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n");
printf(";;Copyright(C) 杭州蜜柑科技有限公司 2008 - 2011. 保留所有权利。;;\n");
printf(";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n");
printf(";;DSP Vibro Example ;;\n");
printf(";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n");

//////////////////////////////////////////////////////////////////////////
//1. Create a global instance handle.
gInstance = MITA_Initialize(MITA_NULL);
MITA_CheckError();

//////////////////////////////////////////////////////////////////////////
//2. Check SDK version, this was not necessary.
MITA_GetVersionStringA(szVersion, 64);
MITA_CheckError();
printf(";;MITA: Version %s\n", szVersion);

//////////////////////////////////////////////////////////////////////////
//3. Load all existed plugins.
MITA_Ins_LoadPluginFromDir(gInstance, L"../../plugins", &PluginCount);
MITA_CheckError();
MITA_Ins_GetModuleCount(gInstance, &PluginCount);
printf(";;MITA: Load %u plugins\n", PluginCount);
printf(";;Support: ;;\n");
MITA_PrintDecSupportExts(gInstance);
printf(";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n");

//////////////////////////////////////////////////////////////////////////
//4. Create Engine Object
MITA_Engine_Create(gInstance, MITA_ENGINEFLAG_CHECKPREPARE|MITA_ENGINEFLAG_CHECKRENDER, &hEngine);
MITA_CheckError();

//////////////////////////////////////////////////////////////////////////
//5. Create Output Source
MITA_GuessChannelMode(8, &ChannelMask);
hOutput = MITA_CreateDefaultOutput(gInstance, ChannelMask);

//////////////////////////////////////////////////////////////////////////
//6. Add source to engine.
MITA_Engine_AddSource(hEngine, hOutput);
MITA_CheckError();
MITA_Output_Startup(hOutput);
MITA_CheckError();

//////////////////////////////////////////////////////////////////////////
//7. Load input source
MITA_Input_LoadByPath(gInstance, L"../media/stereo.ogg", &hItem1);
MITA_CheckError();
MITA_Engine_AddSource(hEngine, hItem1);
MITA_Input_SetResampler(hItem1, MITA_RSR_CUBIC);
MITA_Ins_CreateObject(gInstance, &IID_DspEQ, &hTestDSP);
MITA_Input_AddLaterDSP(hItem1, hTestDSP);
//MITA_DSP_Active(hTestDSP, MITA_FALSE);
{
MITA_FLOAT Freq = 1500;
MITA_FLOAT Width = 10.0f;
MITA_FLOAT Gain = -12.0f;
MITA_DSP_SetParam(hTestDSP, MITA_DSPPARAM_FILTER_FREQ, &Freq);
MITA_DSP_SetParam(hTestDSP, MITA_DSPPARAM_FILTER_WIDTH, &Width);
MITA_DSP_SetParam(hTestDSP, MITA_DSPPARAM_FILTER_GAIN, &Gain);
}

printf("\nPress P to start play.\n");
printf("Press L to start looping play.\n");
printf("Press D to start 3D-Effect play.\n");
printf("Press X to pause.\n");
printf("Press Z to resume.\n");
printf("Press S to stop play.\n");
printf("Press Esc to exit\n");
do
{
if (kbhit())
{
Key = getch();

switch (Key)
{
case 's':
case 'S':
MITA_Input_Stop(hItem1, MITA_TRUE);
break;
case 'x':
case 'X':
MITA_Input_Pause(hItem1);
break;
case 'z':
case 'Z':
MITA_Input_Resume(hItem1);
break;
case 'p':
case 'P':
{
MITA_BYTE Loop = 1;
MITA_Input_Play(hItem1, &Loop);
}break;
case 'l':
case 'L':
{
MITA_BYTE Loop = 0xFF;
MITA_Input_Play(hItem1, &Loop);
}break;
case 'd':
case 'D':
{
MITA_INT32 ticksToPlay = 10000;
MITA_INT32 currentTick = 0;
MITA_FLOAT rot = 0, x, z;
MITA_FLOAT str = 2.0f;
MITA_BYTE Loop = 0xFF;
MITA_FLOAT minDis = 1.0f, maxDis = 100.0f;
MITA_HLISTENER hListener;

MITA_Listener_Create(gInstance, &hListener);
MITA_Listener_SetPosition(hListener, 0, 0, 0);

MITA_Input_Play3D(hItem1, &Loop, 0, 0, 0, &str);
MITA_Input_BindListener3D(hItem1, hListener);
MITA_Input_SetDistance3D(hItem1, &minDis, &maxDis);
while(currentTick < ticksToPlay)
{
//Figure out the location of our rotated sound
rot+=0.1f * 0.017453293f; //0.1 degrees a frame
//Sound "starts" at x=5, y=0, z=0
x = 5.0f * cosf(rot) - 0.0f * sinf(rot);
z = 0.0f * cosf(rot) + 5.0f * sinf(rot);
MITA_Input_Move3D(hItem1, x, 0, z);
++currentTick;
printf("playing 3D tick %d \r", currentTick);
if (kbhit())
{
Key = getch();
if (Key == 27)
break;
}
Sleep(1);
}
Key = 0;
MITA_Input_Stop(hItem1, MITA_TRUE);
MITA_CloseHandle(hListener);
}break;
}
}

MITA_Source_GetStatus(hItem1, &Status);
MITA_Source_GetCurTime(hItem1, &CurTime);
MITA_Input_GetDuration(hItem1, &DurTime);
MITA_Input_GetChannelFormat(hItem1, &ChannelFmt);
MITA_Time_Cvt(&ChannelFmt, &CurTime, MITA_TIMEUNIT_MICRSECOND, &CurTime);
MITA_Time_Cvt(&ChannelFmt, &DurTime, MITA_TIMEUNIT_MICRSECOND, &DurTime);
cur_ms = (MITA_DWORD)MITA_Time_GetData(CurTime);
dur_ms = (MITA_DWORD)MITA_Time_GetData(DurTime);

printf("%10s %02u:%02u:%02u/%02u:%02u:%02u [%u channels][%0.1fKHz]\r", Status==MITA_STATUS_RUNNING?"playing":(Status==MITA_STATUS_PAUSE?"pause":"stop"),
cur_ms / 1000 / 60,
cur_ms / 1000 % 60,
cur_ms / 10 % 100,
dur_ms / 1000 / 60,
dur_ms / 1000 % 60,
dur_ms / 10 % 100,
MITA_CHNFMT_GetNum(ChannelFmt.mask), ChannelFmt.sps/1000.0f);
Sleep(10);
} while (Key != 27);

MITA_Engine_RemoveSource(hEngine, hItem1);
MITA_Engine_RemoveSource(hEngine, hOutput);

MITA_CloseHandle(hItem1);
MITA_CloseHandle(hOutput);
MITA_CloseHandle(hEngine); //Release Engine Object
MITA_CloseHandle(gInstance); //Release global instance handle.
}

#pragma warning(pop)

Matlab 音频处理脚本:DSP 开发 通过这个简单的示例,我们可以看到 Matlab 提供了强大的工具和函数来进行音频处理。无论是简单的音频特效还是复杂的音频算法,Matlab 都是一个强大且灵活的平台,可以满足各种音频处理需求。在本文中,我们将使用 Matlab 来实现一个简单的音频处理脚本,展示如何使用 Matlab 的信号处理工具箱进行音频处理。Matlab 提供了丰富的信号处理工具箱,可以进行更复杂的音频处理操作,如降噪、回声消除、时域和频域变换等。接下来,我们可以应用各种音频处理算法来改变音频的特性。是一个包含音频数据的列向量, 阅读详情

相关推荐

DSP实现音频效果

DSP6711上实现的音频混响算法,变声算法,混音算法等。

使用音频引擎MITA播放某一路径下音乐文件的源代码

#include "../../include/mita.h" /**#ifdef _DEBUG#pragma comment(lib, "../../library/mitaD.lib")#else#pragma comment(lib, "../../library/mit

D-Y-W-DIY-? 783

DSP音效管理器

DSP音效管理器,完美音质,强劲重低音。

C语言在嵌入式实时音频处理:DSP算法实现、音频流处理与低延迟编程(二)

音频流处理是一种实时或近实时处理音频数据的技术,它涉及从数据源接收连续的音频数据流,对其进行处理(如过滤、混音、增益控制、格式转换等),然后再将处理后的音频流输出到目的地,如扬声器或文件。音频流处理在嵌入式系统、游戏开发、VoIP通话、多媒体播放器等多种应用场景中尤为关键。

weixin_56154577的博客 1600

bin2music:用于音乐的任意二进制到音乐转换器

二进制音乐 用于音乐的任意二进制到音乐转换器。 算法 读入二进制文件并按顺序分成 4 个部分 对于每个部分,转换为十六进制 0-B 是 AB 的音乐顺序 C 和 D 指定键更改 E 和 F 表示凹槽变化 通过输入的长度确定速度和拍号 重做这个算法,尤其是 4 和 5,如果调或节奏变化太大 功能列表 v0。 读取二进制并输出带有速度和持续时间 v1 的音符。 以二进制形式读取并输出到 4 个单独的轨道 v2。 将输出呈现为 MIDI v3。 流到 MIDI 笔记 2015 年 5 月 11 日 - 现在意识到将输入缓冲区分成 8 位部分可能不足以做出 MIDI 决定,可能需要切换到 12 位或 16 位

不错的音频DSP实现了多种音效

一款不错的DSP音频处理芯片, 可实现 防啸叫 混响 重低音等 多种音效

SHARC音频DSP的算法详解(九)Chorus Effects 算法的实现及代码详解

合唱的算法在SHARC上怎么去做,请见详解。

ADI_OP的博客 1566

dsp 处理音效反馈

v4a脉冲反馈样本。处理效果杠杠的

dsp语音采集源代码_音视频通话中的关键——DSP消噪技术

DSP(数字信号处理技术),是利用计算机或专用处理设备,以数字形式对信号进行处理,以得到符合人们需要的信号形式的新兴学科,其涉及许多学科而又广泛应用于许多领域,以音视频应用领域最为广泛。 目前市面上广为运用的DSP实现方法有很多,在这里主要列举两项,一是利用通用的可编程DSP实现,即非专用的DSP芯片。与单片机相比,DSP芯片具有更加适合于数字信号处理的软件和硬件资源,可用于复杂的数字信号处理算法...

weixin_39723920的博客 523

dsp高级音效

安卓目前最好的音效处理软件,4.0以上固件可用。机器强大的音效软件

录音与播放源代码,实现音频文件的播放

录音与播放 本程序实现音频文件的播放;单声道录音、立体声录音并保存为.wav文件;枚举系统中的声卡显示在下拉列表中供用户选择。

在网页中插入背景音乐代码(html)

有两种 分别用<bgsound>和<embed></embed>标签,当用<embed>插入背景音乐时可以设置宽度和高度为0,隐藏播放器。 二者的参数如下: ■ <bgsound>: <bgsound> 是用来插入背景音乐,但只适用于 IE,其参数设定不多。如下 <bgsound ...

difen5071的博客 7481

DSP一般音效插件

推荐的几十款DSP音效插件,适用于PotPlayer、KMPlayer、foobar2000、千千静听等。

NetEQ音频DSP处理命令决策

    NetEQ音频DSP处理命令有:Normal(正常播放),加速播放(Accelerate),减速播放(Preemptive),Expand(丢包补偿PLC),merge(融合)

qq_22658119的博客 2341

某手 v8.x 签名计算方法(二) sig和__NS_sig3

一、目标 今天的目标是 sig和__NS_sig3,咱们抓个包先 二、步骤 sig目测像是MD5 先jadx搜索 sig= ,没有找到结果。 再试试 sig ,晕倒 6k多个结果,突然灵光一闪,这些参数,必然是要加入到 Map中,那么我们搜索 "sig" 应该就是这个 CPU.getClock,Hook之 var signCls = Java.use('com.yxcorp.xxx.util.CPU'); signCls.getClock.implementation = function(a,b,c

fenfei331的博客 2427

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 318

JAVA音视频解决方案----收音基础

序言 最近要弄实时语音对讲,先从怎么收音开始吧.参考文章地址如下: https://segmentfault.com/a/1190000014048967 历史 长久以来,音频/视频捕获都是网络开发中的“圣杯”。多年来,我们总是依赖于浏览器插件(Flash 或 Silverlight)实现这一点。快来看看吧! 现在轮到 HTML5 ...

难得糊涂 920

Linux系统监控实战:夜莺监控+categraf采集器配置全流程(附常见问题排查)

本文详细介绍了在Linux系统中使用夜莺监控和categraf采集器进行系统监控的全流程配置,包括环境准备、核心配置文件(如config.toml和procstat.toml)详解、服务集成与验证、高级监控配置实战以及常见问题排查。通过实战案例和优化建议,帮助运维人员快速构建高效的监控体系。

xray4的博客 734
上一篇: 使用音频引擎MITA读取cue文件源代码
下一篇: 使用音频引擎MITA为音频文件添加噪音源代码
Debug_Today
博客等级 码龄19年 31粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值