为啥同一台电脑上能同时运行多个音乐播放程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥同一台电脑上能同时运行多个音乐播放程序?相关的知识,希望对你有一定的参考价值。

课上刚学习过并发和并行的概念,了解了一个CPU可以并发的处理多个应用程序,而多个音乐是怎么在一个声卡上实现同时播放的呢?难道也是两个音乐交替播放?

你好,这是正常的
因为你使用的是多个音乐播放程序,自然就可以放出不同的音乐,同时声卡也是支持的
不管用多少个音乐播放程序都可以同时播放
希望对你有帮助追问

其实我是想问声卡处理这种情况的机制

追答

呵呵,这个其实也没有什么奥秘
简单的说
就是电脑上面的声卡他本身就可以支持好几个音频同时播放
不然就不叫电脑了
希望对你有帮助

参考技术A 很简单,通过多声道实现 参考技术B 软件权限不同追问

为什么和软件权限有关?

追答

不同软件有不同内存位置,由此产生的权限不重叠,因此有不同权限。

mciSendString为啥有的MP3音乐播放不出来

GetShortPathName(szFile,str,sizeof(str));
//mciSendString函数在处理长文件名、中文文件名、空格等会有些问题,用此函数解决这类问题。
ListBox_InsertString(hwnd1,-1,str);
mciSendString(stop,"",0,NULL);
wsprintf(cmd,"play %s",str);
mciSendString(cmd,"",0,NULL);//播放音乐函数
wsprintf(stop,"close %s",str);
wsprintf(abc,"setaudio %s volume to %d",str,v);
mciSendString(abc,"",0,NULL); 用这段去播放音乐的时候,有的音乐可以播,有的就不行,不是文件名和路径问题,是怎么回事啊,照百度百科那样,第一句就说CStatic 没有定义,还有别人说的Dim 也是没有定义,怎么回事啊,我用的是VC6.0 难道我是用错了函数?做一个小播放器,是用什么函数的啊?

参考技术A 如:
TCHAR szBuffer[256] = 0;
TCHAR Buffer[256] = 0;
wsprintf(szBuffer,L"cg.mp3");
wsprintf(Buffer,L"open %s",szBuffer);
mciSendString(Buffer,NULL,0,NULL); //打开设备
wsprintf(Buffer,L"play %s repeat",szBuffer);
mciSendString(Buffer,NULL,0,NULL); //播放

将上面的改为:
TCHAR szBuffer[256] = 0;
TCHAR Buffer[256] = 0;
wsprintf(szBuffer,L"cg.mp3");
wsprintf(Buffer,L"open \"%s\"",szBuffer);
mciSendString(Buffer,NULL,0,NULL); //打开设备
wsprintf(Buffer,L"play \"%s\" repeat",szBuffer);
mciSendString(Buffer,NULL,0,NULL); //播放
参考技术B mciSendString函数,我在实验N次后,发现文件路径不能有空格,如:路径中的文件有“Program Files”这个文件夹包含了空格。这个路径将被视为无效路径而不予执行其他有关操作,同时在播放之前和退出程序之前插入一条关闭指令:mciSendString "close " & 音乐文件, vbNullString, 0, 0 (注:“音乐文件”为全局变量,音乐文件=文件路径+文件名),绝对有好处!

以上是关于为啥同一台电脑上能同时运行多个音乐播放程序?的主要内容,如果未能解决你的问题,请参考以下文章

电脑能同时输出两个声音给两个音箱吗?

Pr导出的视频,电脑上能听到人声和背景音乐,在安卓手机上听不到人声只有BGM,但苹果手机上都可以听到?

小播本地音乐功能指引

在 HTML5 中使用音频标签时如何避免主播重新播放音乐?

校内css背景音乐问题 我的涂鸦板为啥不能播放音乐??

mciSendString为啥有的MP3音乐播放不出来