mciSendString 기능 소개(음악 재생 및 녹음 관련 작업)

기능 기능: 멀티미디어 음악, 비디오 등을 재생합니다.

mciSendString은 MPEG, AVI, WAV, MP3 등과 같은 멀티미디어 파일을 재생하는 데 사용되는 API 명령입니다. 이 기능은 자체 mci 명령을 가지고 있으며 다른 명령을 통해 다른 기능을 구현할 수 있습니다. 여기에서는 mciSendString 기능의 일반적인 사용법과 음악 재생, 빨리 감기, 되감기, 녹음 및 기타 기능에 대해 자세히 설명합니다.

목차

환경 설정

 mciSendString 함수 소개

        mciSendString 함수의 매개변수(총 4개의 매개변수):

 1. 플레이 기능

 2. 재생 종료 직전

 3. 일시 중지 및 계속

4. 음량 조절

 5. 빨리 감기, 빨리 되감기

6. 진행률 표시줄 표시 및 인쇄 진행률 표시줄

7. 녹음 기능


환경 설정

 먼저 vs 파일을 만듭니다.

 일단 설정되면 프로젝트의 속성을 조정하십시오.

 대신 멀티바이트 문자 세트를 사용하십시오. 그렇지 않으면 오류가 보고됩니다.

 그런 다음 링커에서 입력을 클릭하고 추가 종속성을 찾은 다음 클릭하여 컴파일하고 정적 라이브러리 winmm.lib를 가져옵니다.

 마지막으로 SDL 보안 검사를 끄고 아니요로 변경합니다.

 mciSendString 함수 소개

헤더 파일: #include<Windows.h>
               #include<mmsystem.h>

정적 라이브러리: #pragma comment(lib,"winmm.lib")

 파일 프로젝트가 정적 라이브러리를 가져온 경우 추가 여부에 관계없이 정적 라이브러리를 가져오지 않은 경우 헤더 파일 아래에 정적 라이브러리를 추가해야 합니다.

        mciSendString 함수의 매개변수(총 4개의 매개변수):

#include<Windows>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")//已导入静态库,可写可不写

MCIERROR mciSendString(
LPCTSTR lpszCommand, //命令字符串:如 open、play 、close等
LPTSTR lpszReturnString, //接受返回信息的字符串 ,即字符串
UINT cchReturn,   //返回字符串的大小,sizeof
HANDLE hwndCallback //回调窗口句柄,一般设置为NULL
);
//模板
	mciSendString(操作指令 , 获取返回的信息(字符串) , 返回信息的长度 , 窗口句柄(一般为NULL));

관련 명령:

 1. 플레이 기능

현재 내 음악 파일 kk.mp3의 상대 경로는 다음과 같습니다. 이 음악을 재생하려면 open 및 play 두 명령을 통해 재생할 수 있습니다.

	mciSendString("open kk.mp3 alias music", 0, 0, 0);//alias是别名的意思,下面就可以去直接用music来代替kk.mp3
	mciSendString("play music", 0, 0, 0);//播放音乐

 파일을 열 때 mp3 파일에도 별칭을 지정했습니다. 아래에서 직접 음악을 사용하여 파일 이름을 나타냅니다.

음악을 반복해서 재생하려면 음악 재생 후 반복을 추가하면 됩니다.

mciSendString("open kk.mp3 alias music", 0, 0, 0);
mciSendString("play music repeat", 0, 0, 0);

음악이 재생될 때까지 기다린 후 다음 명령문을 실행하려면 음악 재생 후 대기를 추가하십시오.

mciSendString("open kk.mp3 alias music", 0, 0, 0);
mciSendString("play music wait", 0, 0, 0);

동영상 재생을 원하시면 전체화면 재생 플러스 전체화면 OK

mciSendString("play music fullscreen", 0, 0, 0);

 2. 재생 종료 직전

재생이 끝나면 음악을 끕니다.

mciSendString("close music", 0, 0, 0);

 3. 일시 중지 및 계속

물론 음악 재생시 일시정지와 재개는 필수이며 mciSendString을 통해서도 이 기능을 구현할 수 있습니다.

//暂停
mciSendString("pause music",0,0,0);
//或者  
mciSendString("stop music",0,0,0);

//继续播放
mciSendString("resume music",0,0,0);

 따라서 키보드 명령을 통해 음악 재생 및 일시 중지를 제어할 수 있습니다. 코드는 다음과 같습니다.

void stopresume()
{
	char ch;
	int i = 1;
	//这个表示在键盘获取一个字符,但是不打印出来,接着继续往下执行,getch函数的头文件是#include<conio.h>
	mciSendString("play music", 0, 0, 0);//开始,先播放音乐
again:
	ch = getch();
	if (ch == ' '&& i % 2!= 0)//如果获取的字符为空格,同时i为奇数的话,那么就暂停
	{
		mciSendString("pause music", 0, 0, 0);
		++i;
	}
	else if (ch ==' ' && i % 2 == 0)//如果获取的字符为空格,同时i为偶数的话,那么就继续
	{
		mciSendString("resume music", 0, 0, 0);
		++i;
	}
	goto again;//回到上面,继续以下的操作
}

보세요, 이 기능의 기능은 우리가 일반적으로 사용하는 소프트웨어의 일시 중지 및 계속 재생 기능과 완전히 동일합니다.스페이스를 눌러 일시 중지하고 다시 누르면 계속 재생됩니다. 

4. 음량 조절

(1) 현재 볼륨 가져오기

	char a[100];
	mciSendString("status music volume", a, 100, 0);//获取此时的音量数据返回到a,这里的100是表示a的长度,sizeof(a)
//其中a是字符串,如果想把a转换为数字,可以调用atoi函数
int b=atoi(a);//通过atoi函数进行字符数字串转换到int类型
char s[100];
sprintf(s, "setaudio music volume to %d", b%1000+200);//这里建议去取模,此时获得的音量加上200,再除以1000乘上此时媒体音量就是将要播放出来的音量
mciSendString(s,0,0,0);

 이를 기준으로 볼륨을 더하거나 뺄 수 있습니다. 예를 들면 다음과 같습니다.

현재 미디어 볼륨

mciSendString("setaudio music volume to a",0,0,0)을 통해 재생 볼륨을 직접 변경할 수 있습니다. 여기서 a는 숫자입니다. 이 볼륨의 변환은 현재 멀티미디어 볼륨에 a/1000을 곱한 값입니다. , 따라서 이 a의 범위는 0~1000이며, a가 1000을 초과하면 a는 실제로 1000으로 계산됩니다.

mciSendString("setaudio music volume to 800",0,0,0);
//意思是把音量调节到当前媒体音量的80%,换算过来就是此时的音量为32

이제 알았으니 키보드나 마우스의 외부 조작을 통해 재생 볼륨을 어떻게 변경합니까? 실제로 매우 간단합니다. 루프를 사용하여 완료할 수 있습니다. 코드는 다음과 같습니다.

void volume()
{
int i=0;
char a[100];
	mciSendString("open kk.mp3 alias music", 0, 0, 0);
while (true) {
	mciSendString("play music", 0, 0, 0);
	char s = getch();//在键盘上获取一个字符,但是不打印出来,接着往下执行
    system("cls");//清屏
	if (s == 'w')//如果获取的字符为w,那么音量加100
		i += 100;
	else if(s=='s')//如果为s,音量减少100
		i -=100 ;
printf("%d",i);//打印此时的音量
	sprintf(a, "setaudio music volume to %d", i);//把此时的音量以及操作字符串赋给a
	mciSendString(a, 0, 0, 0);//音量的设置
	
}
}

이 기능의 기능은 실제로 아래와 같이 우리가 사용하는 음악 소프트웨어의 볼륨 조절 기능과 동일합니다.

 5. 빨리 감기, 빨리 되감기

멀티미디어 음악이나 비디오를 재생할 때 mciSendString 기능의 지시를 통해 빨리 감기와 빨리 되감기를 실현할 수 있습니다.

//mci 中的seek指令可以实现把播放进度从某一个位置开始,从而实现快进与快退
mciSendString("seek music to 7*1000", 0, 0, 0);//这里表示把music从7秒处开始播放
//这个时间的单位是毫秒,所以我写成7*1000 比较直观表示的7秒

 또한 start 및 end를 사용하여 처음부터 시작을 나타내거나(물론 음악은 일반적으로 처음부터 자연스럽게 시작됨) 재생 진행을 끝까지 직접 가져올 수 있습니다. 다음과 같이:

	mciSendString("seek music to start", 0, 0, 0);//从开头开始播放

	mciSendString("seek music to end", 0, 0, 0);//从最后位置开始播放

이 경우 키보드를 통해 빨리 감기 및 되감기를 할 수 있으며 코드는 다음과 같습니다.

void forwardbackdard()
{
	char arr;
	int i = 0;
	char ss[100];
	mciSendString("open kk.mp3 alias music", 0, 0, 0);
	while (true)
	{
		mciSendString("play music", 0, 0, 0);
		arr = getch();
		system("cls");
		if (arr == 'd')
			i += 2 * 1000;//每次快进2秒
		else if (arr == 'a')
			i -= 2 * 1000;//每次快退了2秒
		sprintf(ss,"seek music to %d", i);//懂的都懂
		mciSendString(ss, 0, 0, 0);
		printf("%d", i/1000);//打印出此时快进或者快退了多少秒
	}
}

6. 진행률 표시줄 표시 및 인쇄 진행률 표시줄

 진행률 표시줄은 이름에서 알 수 있듯이 음악의 길이를 나타내는 제한된 선 길이입니다. 여기에서 그래픽 라이브러리를 통해 진행률 표시줄을 인쇄하거나 기호를 사용하여 제어판에 진행률 표시줄을 인쇄할 수 있습니다.

        진행률 표시줄을 인쇄하려면 먼저 노래의 길이를 가져와야 합니다. mci 명령의 길이를 사용하여 시간 길이를 얻을 수 있습니다(시간 길이 단위는 밀리초로 계산되며 이는 동일합니다. 볼륨으로).

char length[100];
mciSendString("status music length", length, 100, 0);//获取音乐长度,返回到字符串length
//同上我们可以把字符串转换为int类型
int num;
num=atoi(length);

        둘째, 이 때 얼마나 많은 음악이 재생되었는지에 대한 길이도 있으며, mci 명령의 위치를 ​​사용하여 현재 재생 시간의 길이를 얻습니다.

char now[100];
mciSendString("status music position", now, 100, 0);//把此时此刻已播放的时间以字符串形式返回到字符串now中
int t;
t=atoi(now);//转化到int类型

다음으로 그래픽 라이브러리를 통해 진행률 표시줄을 출력합니다. 전체 코드는 다음과 같습니다.

#include<stdio.h>
#include<graphics.h>
#include<Windows.h>
#include<mmsystem.h>
void progress()
{
	char length[100];
	char now[100];
	int x;
	int t = 0;
	int time;
	mciSendString("status music length", length, 100, 0);
	time = atoi(length);
	while (true) {
		
		x = getwidth() * t / time;	//获取窗口的宽度乘上此时的进度/总进度
		setfillcolor(BLUE);//设置填充颜色为蓝色
		fillrectangle(0, 300, x, 320);//画一个长方形,这个长方形会随着x的值变化
			fillcircle(x, 310, 10);//画一个填充圆
		mciSendString("status music position", now, 100, 0);
		 t = atoi(now);	
	}
}
void alllong()//画出进度总长度,初始化
{
	setfillcolor(RGB(100, 100, 100));//颜色为灰色
	fillrectangle(0, 300, 1000, 320);
}
int main()
{
	                                      
	initgraph(1000, 400);
	alllong();
	mciSendString("open 2.mp3 alias music", 0, 0, 0);
	mciSendString("play music", 0, 0, 0);
	progress();
    system("pause");
}

다음은 실행 결과입니다.

7. 녹음 기능

mciSendString 기능이 재생 기능만 있다고 생각하지 마세요.사실 이 기능도 녹음 기능이 있습니다.관련 명령을 통해 녹음을 실현하고 오디오 파일을 생성하여 컴퓨터에 저장합니다.

        녹음을 실현하는 것은 4단계로 나눌 수 있습니다. 먼저 녹음 파일을 열고 녹음된 소리를 녹음한 다음 컴퓨터에 저장하고 마지막으로 파일을 닫습니다(사실 이 과정은 텍스트 파일).

mciSendString("open new type waveaudio alias moo", 0, 0, 0);//打开建立一个声音类型的文件项目,别名为moo
mciSendString("record moo", 0, 0, 0);//开始记录声音

//中间这里可以通过延迟函数Sleep去控制录音时间,或者自行设立一个结束录音按键

mciSendString("save moo e:\\jojo\\123.mp3", 0, 0, 0);//设为mp3格式(还可以设置为其他格式例如wav),保存到 ……
mciSendString("close moo", 0, 0, 0);//关闭这个项目

        위의 4단계를 기록할 수 있지만 그 효과는 그다지 전문적이지 않습니다. 전문성을 높이고 싶다면 상대적으로 mci 명령어가 많은데 우선 소리 선명도(포지션), 허용되는 소리 주파수(Hz), 재생 채널(모노 또는 듀얼) 도로)를 설정해야 하고, 소리의 인코딩 형식(예: 디지털 신호의 인코딩 형식 및 다양한 유형의 사운드의 아날로그 신호) 등... 자세한 내용을 알고 싶다면 여기에서 더 이상 이야기하지 않겠습니다. http://t.csdn .cn/NclCi

         그런 다음 여기에 완전한 코드를 작성합니다.

#include<stdio.h>
#include<Windows.h>
#include<mmsystem.h>
void recordvoice()
{
//初始化声音规格
	mciSendString("set wave bitpersample 8", 0, 0, 0);//设置音频的位度 8位,(还有16,24位,位度越高,声音越清晰)
	mciSendString("set wave samplespersec 1",0,0, 0);//设置录音赫兹,11025是人类可
	mciSendString("set wave channels 2", 0, 0, 0);//设置声道,2是表示立体声(双声道),1是表示单声道
	mciSendString("set wave format tag pcm", 0, 0, 0);//设置pcm格式,是数字信号比模拟信号质量要好
	mciSendString("open new type waveaudio alias moo", 0, 0, 0);//打开建立一个声音类型的文件项目
	mciSendString("record moo", 0, 0, 0);//开始记录声音
	char d;
	d = getch();
	if (d == ' '); //按下空格表示录音结束
	{
        printf("录音结束\n");
		mciSendString("save moo e:\\jojo\\123.wav", 0, 0, 0);//保存
		mciSendString("close moo", 0, 0, 0);//关闭
	}
}
int main()
{
	                                      
	prinft("开始录音\n");
	recordvoice();
    system("pause");
}

이상으로 소개는 여기까지입니다 읽어주신 분들 환영합니다 mciSendString 함수를 배웠다면 주의해서 좋아요를 눌러주세요 다음 호에서는 mciSendString 함수를 사용하여 만드는 방법에 대해 이야기하겠습니다 음악 플레이어.

추천

출처blog.csdn.net/m0_73633088/article/details/128371136