PlaySound() с файлом ресурсов не работает
Я немного сбит с толку из-за того, как происходит использование PlaySound() с файлом ресурсов, потому что, читая здесь и тестируя все, я не могу добиться, чтобы звуки wav-файла звучали в командной строке u_u. Так что, если вы можете мне помочь, я буду очень благодарен. $
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "resources.h"
#pragma comment(lib, "Winmm.lib")
int main () {
srand (time(NULL));
int secreto, num, s1, s2, s3, d1, d2, d3, toque, fama, computer, ntoques, nfamas, fin, pc;
PlaySound(MAKEINTRESOURCE(sound), NULL, SND_RESOURCE | SND_ASYNC | SND_LOOP);
printf ("\n\n\t\t***************************************\n\n");
printf ("\n\n\t\t** Bienvenido al juego: Toque y Fama **\n\n"); //momento donde se inicia el juego
printf ("\n\n\t\t***************************************\n\n");
secreto = (rand()%899+100); //funcion que permitira aleatoriamente elegir un numero secreto
printf ("\n\n\n\tEn este juego tienes que adivinar el numero que estoy pensando! \n\n\t\t\tSeras capaz de lograrlo?\n\n\n");
printf ("\nPor favor, ingrese un numero de tres cifras\n\n");
scanf ("\n%d",&num); //aqui el jugador digita un numero con el fin de adivinar el de su rival
while ((num<000)||(num<=011)||(num>=1000)) {
printf ("\n\nLos digitos ingresados no son de tres cifras");
printf ("\n\nIngrese un nuevo numero: \n\n");
scanf ("%d",&num);
}
while (num != secreto) { //se produciran iteraciones siempre que el numero que se digite sea distinto al numero secreto del rival
s1= secreto/100;
s2= (secreto%100-secreto%100%10)/10; //aqui se hace la division del numero secreto para poder hacer las combinaciones
s3= secreto%100%10;
d1= num/100;
d2= (num%100-num%100%10)/10; //lo mismo se hace con el numero dado por el rival
d3= num%100%10;
toque = 0;
fama = 0;
if ((d1==s1)||(d2==s2)||(d3==s3)||(d1==s2)||(d1==s3)||(d2==s1)||(d2==s3)||(d3==s1)||(d3==s2)) { //aca se ven las combinaciones posibles de toques y famas
if (d1==s1){
fama=fama+1;
}
if (d2==s2){
fama=fama+1;
}
if (d3==s3){
fama=fama+1;
}
if (d1==s2){
toque=toque+1;
}
if (d1==s3){
toque=toque+1;
}
if (d2==s1){
toque=toque+1;
}
if (d2==s3){
toque=toque+1;
}
if (d3==s1){
toque=toque+1;
}
if (d3==s2){
toque=toque+1;
}
if (toque==1){
printf ("Tu tienes un toque\n");
}
if (toque==2||toque==3){
printf ("Tu tienes %d toques\n",toque);
}
if (fama==1){
printf ("Tu tienes una fama\n");
}
if (fama==2||fama==3){
printf ("Tu tienes %d famas\n",fama);
}
}
computer = (rand()%899+100); //esta funcion permitira generar el numero que cumplira la funcion de adivinar el secreto rival
printf ("\n\t\t\t*******************\n\n");
printf ("\n\t\t\tTurno de la Maquina\n\n");
printf ("\n\t\t\t*******************\n\n");
printf ("\n\nNo has acertado, estos son mis numeros: \n\n");
printf ("%d\n\n",computer);
printf ("\nIngrese cantidad de toques acertados\n\n");
scanf ("\n%d",&ntoques);
while ((ntoques<0)||(ntoques>=4)) {
printf ("\nLos toques ingresados no son correctos. Favor ingresar nuevamente\n\n");
scanf ("\n%d",&ntoques);
}
printf ("\nIngrese cantidad de famas acertadas\n\n");
scanf ("\n%d",&nfamas);
while ((nfamas<0)||(nfamas>=4)) {
printf ("\nLas famas ingresadas no son correctas. Favor ingresar nuevamente\n\n");
scanf ("\n%d",&nfamas);
}
if (nfamas==3) {
pc = 1;
fin = secreto;
num = fin;
}
else {
printf ("\n\t\t\t*****************\n\n");
printf ("\n\t\t\tTurno del Jugador\n\n"); //se vuelve a la iteracion si no se ha adivinado el numero
printf ("\n\t\t\t*****************\n\n");
printf ("\n\nIngresa un nuevo numero: \n\n");
scanf ("\n%d",&num);
while ((num<000)||(num<=011)||(num>=1000)) {
printf ("\nLos digitos ingresados no son de tres cifras");
printf ("\n\nIngrese un nuevo numero: \n\n");
scanf ("\n%d",&num);
}
}
}
if (pc==1) {
printf ("\n\nTe he derrotado\n\n"); //si se adivina, sale de la iteracion y escribe la derrota del jugador
printf ("\n\nEl juego ha concluido\n\n");
}
else {
printf ("\n\nMe has derrotado\n\n"); //si el jugador adivina el secreto rival, el ordenador escribira esta frase
printf ("\n\nEl juego ha concluido\n\n");
}
return 0;
}
Мой файл ресурсов говорит следующую строку
sound WAVE "eric johnson - 017 eric johnson - cliffs of dover441.wav"
И, заголовочный файл (resources.h), просто
#ifndef RESOURCE_H_INCLUDED
#define RESOURCE_H_INCLUDED
#define sound 1001
#endif // RESOURCE_H_INCLUDED
Компилируя, я добавляю флаги -lwinmm и -mwindows, и программа компилируется, но, когда я ее выполняю, я не получаю никакого звука или ответа от остальной части программы, только потребляет память, но ничего больше.
Спасибо за все:3.
1 ответ
Вы передаете аргумент, но программа его не использует. Изменить следующим образом
int main(int argc, const char* argv[])
...
PlaySound(TEXT(argv[1]), NULL, SND_FILENAME);
Это подберет имя файла, который вы передаете, и воспроизведет его.
Edit1 Проверьте, работает ли это
PlaySound((LPCTSTR) SND_ALIAS_SYSTEMSTART, NULL, SND_ALIAS_ID);
Вы должны получить звук запуска - это в основном доказывает, что PlaySound в основном работает. Если вы вообще не слышите звука, возможно, что-то не так. Обратите внимание, что любая загружаемая мелодия должна уместиться в памяти.
Если это работает, попробуйте
PlaySound(TEXT("SystemStart"), NULL, SND_ALIAS);
Если это работает, скопируйте файл \ windows \ media \ chimes.wav в текущий каталог и попробуйте
PlaySound(TEXT(".\\chimes.wav"), NULL, SND_FILENAME);
Если это не сработает, определите, какой каталог времени выполнения. Как только вы это заработаете, попробуйте это с вашим WAV-файлом. Если это работает, попробуйте полный путь
PlaySound(TEXT("\\Windows\\Media\\Windows Logoff Sound.wav"), NULL, SND_FILENAME);
Если это работает, попробуйте указать полный путь к файлу WAV.