import std.cstream; import std.string; import SDL; import SDL_mixer; extern (C) { void show_magnitude(void* udata, Uint8* s, int len) { Uint32 mag = 0; for (int i = 0; i < len; i++) { Sint8 p = cast(Sint8)*s; mag += (p > 0) ? p : -p; s++; } mag /= len; mag *= 79; mag /= 255; for (int i = 0; i < mag; i++) { dout.write(cast(char)'#'); } dout.writeLine(""); } } int main(char[][] args) { if (args.length < 2) { dout.writeLine("HIKISUU KUDASAI"); return 0; } dout.writeLine("play " ~ args[1]); SDL_Init(SDL_INIT_AUDIO); Mix_OpenAudio(22050, AUDIO_S16, 2, 2048); Mix_Music* music = Mix_LoadMUS(args[1]); Mix_SetPostMix(&show_magnitude, null); if (Mix_PlayMusic(music, 1) != 0) { dout.writeLine(std.string.toString(SDL_GetError())); return 0; } while (Mix_PlayingMusic()) { SDL_Event ev; SDL_PollEvent(&ev); if (ev.type == SDL_QUIT) break; SDL_Delay(33); } Mix_HaltMusic(); Mix_FreeMusic(music); Mix_CloseAudio(); SDL_Quit(); return 0; }