[vlc-devel] [PATCH 2/2] Add simple test for the libvlc equalizer API.
Rémi Denis-Courmont
remi at remlab.net
Sun Aug 12 10:48:24 CEST 2012
If it's a test case, it would be nice to put it in the test directory and
include it in 'make check' like the existing LibVLC tests.
Le dimanche 12 août 2012 11:30:46 Mark Lee, vous avez écrit :
> ---
> doc/libvlc/equalizer.c | 196
> ++++++++++++++++++++++++++++++++++++++++++++++++ 1
file changed, 196
> insertions(+)
> create mode 100644 doc/libvlc/equalizer.c
>
> diff --git a/doc/libvlc/equalizer.c b/doc/libvlc/equalizer.c
> new file mode 100644
> index 0000000..5823b6f
> --- /dev/null
> +++ b/doc/libvlc/equalizer.c
> @@ -0,0 +1,196 @@
> +/**
> + * A simple program to test the audio equalizer API in libvlc.
> + *
> + * An example build command:
> + *
> + * gcc -std=c99 -I/home/linux/vlc/vlc/include -o equalizer equalizer.c
> `pkg-config --cflags --libs libvlc` + *
> + * You may use this example code freely for any purpose without
> restriction. + *
> + * When running this test, you must pass via the command-line two separate
> audio filenames + * to be played during the test - for example:
> + *
> + * ./equalizer /home/music/1.mp3 /home/music/2.mp3
> + *
> + * (C)2012 Mark Lee <mark.lee at capricasoftware.co.uk>
> + */
> +
> +#include <unistd.h>
> +#include <vlc/vlc.h>
> +#include <vlc/libvlc.h>
> +
> +int main(int argc, char *argv[]) {
> +
> + if(argc != 3) {
> + printf("Specify two audio file names\n");
> + return -1;
> + }
> +
> + char *psz_file1 = argv[1];
> + char *psz_file2 = argv[2];
> +
> + libvlc_instance_t *p_instance = libvlc_new(0, NULL);
> +
> + printf("Equalizer Tests\n\n");
> +
> + // Dump out the individual frequency bands
> + printf("Bands...\n");
> + unsigned u_bands = libvlc_audio_equalizer_get_band_count();
> + for(int i = 0; i < u_bands; i++) {
> + printf(" Band %2d -> %.1fHz\n", i,
> libvlc_audio_equalizer_get_band_frequency(i)); + }
> + printf("\n");
> +
> + // Dump out each preset name
> + printf("Presets...\n");
> + unsigned u_presets = libvlc_audio_equalizer_get_preset_count();
> + for(int i = 0; i < u_presets; i++) {
> + printf(" Preset %2d -> %s\n", i,
> libvlc_audio_equalizer_get_preset_name(i)); + }
> + printf("\n");
> +
> + // Dump out the settings for each preset
> + for(int i = 0; i < u_presets; i++) {
> + const char* psz_name = libvlc_audio_equalizer_get_preset_name(i);
> + printf("%d %s\n", i, psz_name);
> + libvlc_equalizer_t *p_equalizer =
> libvlc_audio_equalizer_new_from_preset(i); + printf(" Preamp:
> %18.2fdB\n", libvlc_audio_equalizer_get_preamp(p_equalizer)); +
> for(int j = 0; j < u_bands; j++) {
> + printf(" Band: %7.1fHz -> %5.2fdB\n",
> libvlc_audio_equalizer_get_band_frequency(j),
> libvlc_audio_equalizer_get_amp_at_index(p_equalizer, j)); + }
> + libvlc_audio_equalizer_release(p_equalizer);
> + printf("\n");
> + }
> +
> + // Now some tests with the equalizer and a media player...
> +
> + libvlc_media_player_t *p_media_player =
> libvlc_media_player_new(p_instance); +
> + libvlc_media_t *p_media = libvlc_media_new_path(p_instance,
> psz_file1); + libvlc_media_player_set_media(p_media_player, p_media);
> + libvlc_media_release(p_media);
> +
> + // sleep(i_delay) is used just because it is convenient for this test,
> of course you wouldn't do that normally + int i_delay = 5; // seconds
> +
> + // Presets...
> +
> + libvlc_equalizer_t *p_equalizer_full_treble =
> libvlc_audio_equalizer_new_from_preset(6); + libvlc_equalizer_t
> *p_equalizer_full_bass = libvlc_audio_equalizer_new_from_preset(4); +
> + // It is possible to set an equalizer before playing media
> + printf("Set full treble\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_treble); +
> + // Now play...
> + printf("Play\n");
> + libvlc_media_player_play(p_media_player);
> + sleep(i_delay);
> +
> + // Change equalizer while playing
> + printf("Set full bass\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_bass); + sleep(i_delay);
> +
> + printf("Set full treble\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_treble); + sleep(i_delay);
> +
> + // Stop playback
> + printf("Stop\n");
> + libvlc_media_player_stop(p_media_player);
> + sleep(1);
> +
> + // Start playback, settings should be remembered
> + printf("Play\n");
> + libvlc_media_player_play(p_media_player);
> + sleep(i_delay);
> +
> + // Change equalizer while playing
> + printf("Set full bass\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_bass); + sleep(i_delay);
> +
> + printf("Set full treble\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_treble); + sleep(i_delay);
> +
> + // Change media
> + printf("Change media\n");
> + p_media = libvlc_media_new_path(p_instance, psz_file2);
> + libvlc_media_player_set_media(p_media_player, p_media);
> + libvlc_media_release(p_media);
> +
> + // Play new media, settings should be remembered
> + libvlc_media_player_play(p_media_player);
> +
> + sleep(i_delay);
> +
> + // Change equalizer while playing
> + printf("Set full bass\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_bass); + sleep(i_delay);
> +
> + printf("Set full treble\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_treble); + sleep(i_delay);
> +
> + printf("Disable equalizer\n");
> + libvlc_media_player_set_equalizer(p_media_player, NULL);
> + sleep(i_delay);
> +
> + printf("Set full treble\n");
> + libvlc_media_player_set_equalizer(p_media_player,
> p_equalizer_full_treble); + sleep(i_delay);
> +
> + printf("Disable equalizer\n");
> + libvlc_media_player_set_equalizer(p_media_player, NULL);
> + sleep(i_delay);
> +
> + // We're finished with the presets, they are no longer associated with
> any + // media player, so release them
> + libvlc_audio_equalizer_release(p_equalizer_full_bass);
> + libvlc_audio_equalizer_release(p_equalizer_full_treble);
> +
> + libvlc_media_player_stop(p_media_player);
> +
> + // Custom...
> +
> + libvlc_equalizer_t *p_equalizer = libvlc_audio_equalizer_new();
> + libvlc_audio_equalizer_set_preamp(p_equalizer, 6.5f);
> + libvlc_audio_equalizer_set_amp_at_index(p_equalizer, 20.0f, 1);
> + libvlc_audio_equalizer_set_amp_at_index(p_equalizer, 15.3f, 7);
> + libvlc_audio_equalizer_set_amp_at_index(p_equalizer, 16.2f, 8);
> + libvlc_audio_equalizer_set_amp_at_index(p_equalizer, 17.1f, 9);
> +
> + // Set a new custom equalizer before playback starts
> + printf("Set custom\n");
> + libvlc_media_player_set_equalizer(p_media_player, p_equalizer);
> +
> + printf("Play\n");
> + libvlc_media_player_play(p_media_player);
> + sleep(i_delay);
> +
> + // Change the custom equalizer while playing
> + printf("Change custom\n");
> + libvlc_audio_equalizer_set_preamp(p_equalizer, 8.75f);
> + libvlc_audio_equalizer_set_amp_at_index(p_equalizer, 20.0f, 4);
> + libvlc_audio_equalizer_set_amp_at_index(p_equalizer, 20.0f, 5);
> + libvlc_media_player_set_equalizer(p_media_player, p_equalizer);
> + sleep(i_delay);
> +
> + printf("Disable equalizer\n");
> + libvlc_media_player_set_equalizer(p_media_player, NULL);
> + sleep(i_delay);
> +
> + printf("End of test\n");
> +
> + libvlc_audio_equalizer_release(p_equalizer);
> +
> + libvlc_media_player_stop(p_media_player);
> +
> + libvlc_media_player_release(p_media_player);
> +
> + libvlc_release(p_instance);
> + return 0;
> +}
--
Rémi Denis-Courmont
C/C++ software engineer looking for a job
http://www.linkedin.com/in/remidenis
More information about the vlc-devel
mailing list