Commit 822be037 authored by Warren Dukes's avatar Warren Dukes

finish adding AliasMrJones replayGain stuff

git-svn-id: https://svn.musicpd.org/mpd/trunk@953 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent 04fdc209
......@@ -10,9 +10,7 @@ common function and abstrct dealing with DecoderControl * and put
cycleLogFiles in there, so we cycleLogFiles while decoding, not just when
decoding has stopped.
3) reaplygain
4) streaming and playing in general
3) streaming and playing in general
a) determine a clever interface to play, so that play doesn't block
until the file is opened, but just returns when the command
is accepted.
......@@ -21,17 +19,19 @@ decoding has stopped.
c) this will help streaming from blocking indefinetly or waiting
on a response
5) play streams
4) play streams
6) ACK error codes
5) ACK error codes
7) cleanup main()
6) cleanup main()
8) handle '\n' in filenames
7) handle '\n' in filenames
9) allow "add" command to load playlists, then depricate "load" command, this
8) allow "add" command to load playlists, then depricate "load" command, this
will be benneficial for adding m3u url's
9) compute average replaygain to use for non-replaygain songs
Post-1.0
--------
......
......@@ -32,6 +32,7 @@
#include "volume.h"
#include "log.h"
#include "permission.h"
#include "replayGain.h"
#include "../config.h"
#include <stdio.h>
......@@ -322,6 +323,7 @@ int main(int argc, char * argv[]) {
initPaths(options.playlistDirArg,options.musicDirArg);
initPermissions();
initReplayGainState();
initTables();
initPlaylist();
......
......@@ -27,6 +27,7 @@
#include "pcm_utils.h"
#include "inputStream.h"
#include "outputBuffer.h"
#include "replayGain.h"
#include <stdio.h>
#include <unistd.h>
......@@ -83,11 +84,70 @@ long ogg_tell_cb(void * inStream) {
return ((InputStream *)inStream)->offset;
}
char * ogg_parseComment(char * comment, char * needle) {
int len = strlen(needle);
if(strncasecmp(comment,needle,len)) return comment+len;
return NULL;
}
float ogg_getReplayGainScale(char ** comments) {
int trackGainFound = 0;
int albumGainFound = 0;
float trackGain = 1.0;
float albumGain = 1.0;
float trackPeak = 0.0;
float albumPeak = 0.0;
char * temp;
int replayGainState = getReplayGainState();
if(replayGainState == REPLAYGAIN_OFF) return 1.0;
while(*comments) {
if((temp = ogg_parseComment(*comments,"replaygain_track_gain")))
{
trackGain = atof(temp);
trackGainFound = 1;
}
else if((temp = ogg_parseComment(*comments,
"replaygain_album_gain")))
{
albumGain = atof(temp);
albumGainFound = 1;
}
else if((temp = ogg_parseComment(*comments,
"replaygain_track_peak")))
{
trackPeak = atof(temp);
}
else if((temp = ogg_parseComment(*comments,
"replaygain_album_peak")))
{
albumPeak = atof(temp);
}
comments++;
}
switch(replayGainState) {
case REPLAYGAIN_ALBUM:
if(albumGainFound) {
return computeReplayGainScale(albumGain,albumPeak);
}
default:
return computeReplayGainScale(trackGain,trackPeak);
}
return 1.0;
}
int ogg_decode(OutputBuffer * cb, AudioFormat * af, DecoderControl * dc)
{
OggVorbis_File vf;
ov_callbacks callbacks;
InputStream inStream;
callbacks.read_func = ogg_read_cb;
callbacks.seek_func = ogg_seek_cb;
......@@ -124,6 +184,8 @@ int ogg_decode(OutputBuffer * cb, AudioFormat * af, DecoderControl * dc)
int chunkpos = 0;
long bitRate = 0;
long test;
float replayGainScale = ogg_getReplayGainScale(
ov_comment(&vf,-1)->user_comments);
while(!eof) {
if(dc->seek) {
......@@ -141,6 +203,7 @@ int ogg_decode(OutputBuffer * cb, AudioFormat * af, DecoderControl * dc)
if((test = ov_bitrate_instant(&vf))>0) {
bitRate = test/1000;
}
doReplayGain(chunk,ret,af,replayGainScale);
sendDataToOutputBuffer(cb,dc,chunk,ret,
ov_time_tell(&vf),bitRate);
if(dc->stop) break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment