On Thu, 2014-09-25 at 21:02 +0100, Harry van Haaren wrote:
> On Thu, Sep 25, 2014 at 8:50 PM, Joël Krähemann <weedlight@email-addr-hidden> wrote:
> > Does someone know about writing WAV using libsndfile?
> > My file becomes 174M big as using sf_writef_short() within 8s
>
> Are you sure you're only writing each sample once? Sounds like there's
> an error in writing "nframe" samples for each sample or something.
>
> Its pretty easy: and there's a brilliant to-the-point blog post on
> using C++ interface (sndfile.hh) here:
> http://parumi.wordpress.com/2007/12/16/how-to-write-wav-files-in-c-using-libsndfile/
>
> If there's still issues, please pastebin some code, or ask a more
> specific question :)
>
> HTH, -Harry
There probably only those three functions involved:
void
ags_export_output_launch(AgsTask *task)
{
AgsExportOutput *export_output;
AgsExportThread *export_thread;
AgsDevout *devout;
AgsAudioFile *audio_file;
gchar *filename;
export_output = AGS_EXPORT_OUTPUT(task);
devout = export_output->devout;
export_thread = export_output->export_thread;
filename = export_output->filename;
/* open read/write audio file */
audio_file = ags_audio_file_new(filename,
devout,
0, devout->dsp_channels);
audio_file->samplerate = (int) devout->frequency;
audio_file->channels = devout->dsp_channels;
// audio_file->format = devout->bits;
audio_file->frames = export_output->frames;
ags_audio_file_rw_open(audio_file,
TRUE);
g_message("export output");
/* start export thread */
g_object_set(G_OBJECT(export_thread),
"audio-file\0", audio_file,
NULL);
ags_thread_start(export_thread);
}
void
ags_export_thread_run(AgsThread *thread)
{
AgsExportThread *export_thread;
AgsDevout *devout;
export_thread = AGS_EXPORT_THREAD(thread);
devout = thread->devout;
if((AGS_DEVOUT_BUFFER1 & (devout->flags)) != 0){
ags_audio_file_write(export_thread->audio_file,
devout->buffer[0], devout->buffer_size);
}else if((AGS_DEVOUT_BUFFER2 & (devout->flags)) != 0){
ags_audio_file_write(export_thread->audio_file,
devout->buffer[1], devout->buffer_size);
}else if((AGS_DEVOUT_BUFFER3 & (devout->flags)) != 0){
ags_audio_file_write(export_thread->audio_file,
devout->buffer[2], devout->buffer_size);
}else if((AGS_DEVOUT_BUFFER0 & (devout->flags)) != 0){
ags_audio_file_write(export_thread->audio_file,
devout->buffer[3], devout->buffer_size1);
}
}
void
ags_sndfile_write(AgsPlayable *playable, signed short *buffer, guint
buffer_length)
{
AgsSndfile *sndfile;
sf_count_t multi_frames, retval;
sndfile = AGS_SNDFILE(playable);
multi_frames = buffer_length;
retval = sf_write_short(sndfile->file, buffer, multi_frames);
if(retval > multi_frames){
// sf_seek(sndfile->file, (multi_frames - retval),
SEEK_CUR);
}
}
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@email-addr-hidden
http://lists.linuxaudio.org/listinfo/linux-audio-dev
Received on Fri Sep 26 04:15:01 2014
This archive was generated by hypermail 2.1.8 : Fri Sep 26 2014 - 04:15:01 EEST