kolibrios/programs/media/Beat/PlayNote/PlayNote.c

107 lines
2.8 KiB
C
Raw Normal View History

/*
* Author: JohnXenox aka Aleksandr Igorevich.
*
* Program name: PlayNote
* Description: The program to play a note.
*
* Works from command line, only!
*/
// To generate .wav file with sox (to listen):
// sox -n -L -c 1 -b 16 -r 48000 Note_C5.wav synth 1 sine 1046.4
// To generate .raw file with sox (to PlayNote):
// sox -n -L -c 1 -b 16 -r 48000 Note_C5.raw synth 1 sine 1046.4
#define CREATION_DATE "2020.05.17"
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include "PlayNote_lib1.h"
#include "PlayNote_lib2.h"
unsigned int drv_ver = 0;
unsigned int buffer = 0;
unsigned int *raw_file_data = 0;
char raw_file[4096] = {0};
int main(int argc, char** argv)
{
// ============================================================ //
// checks memory availability ================================= //
if(initMemory() == 0) return -1;
// ============================================================ //
// sets a current path to a raw file ========================== //
//setCurrentPathToARawFile(raw_file, argv[0], "Note_C6_0.5.raw");
_ksys_set_wanted_events(0);
// ============================================================ //
// processes the command line arguments ======================= //
if (argc > 1)
{
//printfOnADebugBoard("ARGV1: %s\n", argv[1]);
strcpy(raw_file, argv[1]);
// checks to a full path to a file?
if(*argv[1] != '/')
{
setCurrentPathToARawFile(raw_file, argv[0], argv[1]);
}
}
else
{
if (con_init_console_dll()) return 1; // init fail
con_set_title("Useful info!");
con_printf("\n Name: PlayNote");
con_printf("\n Date: %s", CREATION_DATE);
con_printf("\n Description: The program to play a note.\n");
con_printf("\n Author: JohnXenox\n");
con_printf("\n Usage: PlayNote <path>\n");
con_printf(" path - path to a file to be played.\n\n");
con_printf(" Examples:\n");
con_printf(" PlayNote note.raw\n");
con_printf(" PlayNote /tmp0/1/note.raw\n");
return 0;
}
//printfOnADebugBoard("raw_file path: %s\n", argv[1]);
// ============================================================ //
// plays a note =============================================== //
int raw_file_length = 0;
raw_file_data = openFile(&raw_file_length,raw_file);
if(raw_file_data == 0) return -2;
_InitSound(&drv_ver);
_CreateBuffer((PCM_STATIC | PCM_1_16_48), raw_file_length, &buffer);
_SetBuffer((int*)buffer, (int*)raw_file_data, 0, raw_file_length);
_SetBufferPos((int*)buffer, 0);
_PlayBuffer((int*)buffer, 0);
makeDelay(30);
_StopBuffer((int*)buffer);
return 0;
}