Ignore:
Timestamp:
01/05/08 20:49:27 (16 years ago)
Author:
radscorpion
Message:

Fixed SV7 seeking artifacts. Fixed gain info.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dsfilters/demux_mpc/src/mpc_file.cpp

    r379 r380  
    88#include "stdafx.h"
    99#include <math.h>
     10
     11#define OLD_GAIN_REF            64.82
    1012
    1113
     
    164166
    165167        b.NeedBits32();
    166         gain_title_db = b.SGetBits(16) / 100.0;         // title gain
     168        gain_title_db = ((int16)b.SGetBits(16)) / 100.0;                // title gain
    167169        int title_peak = b.UGetBits(16);
    168         if (title_peak != 0) {
    169                 gain_title_peak_db = 20 * log10f((float)title_peak);            // title peak
     170        if (title_peak != 0) {         
     171                gain_title_peak_db = (title_peak / 32767.0);
    170172        } else {
    171173                gain_title_peak_db = 0;
     
    173175
    174176        b.NeedBits32();
    175         gain_album_db = b.SGetBits(16) / 100.0;         // album gain
     177        gain_album_db = ((int16)b.SGetBits(16)) / 100.0;                // album gain
    176178        int album_peak = b.UGetBits(16);
    177179        if (album_peak != 0) {
    178                 gain_album_peak_db = 20 * log10f((float)album_peak);            // album peak
     180                gain_album_peak_db = (album_peak / 32767.0);
    179181        } else {
    180182                gain_album_peak_db = 0;
    181183        }
    182184
    183         #define OLD_GAIN_REF            64.82
    184         if (gain_title_db != 0) {
    185                 gain_title_db = OLD_GAIN_REF - gain_title_db;
    186         }
    187         if (gain_album_db != 0) {
    188                 gain_album_db = OLD_GAIN_REF - gain_album_db;
    189         }
    190185
    191186        b.NeedBits32();
     
    300295        int16   val;
    301296        b.NeedBits();   val = b.SGetBits(16);   gain_title_db = val / 256.0;
    302         b.NeedBits();   val = b.SGetBits(16);   gain_title_peak_db = val / 256.0;
     297        b.NeedBits();   val = b.UGetBits(16);   gain_title_peak_db = val;
    303298        b.NeedBits();   val = b.SGetBits(16);   gain_album_db = val / 256.0;
    304         b.NeedBits();   val = b.SGetBits(16);   gain_album_peak_db = val / 256.0;
     299        b.NeedBits();   val = b.UGetBits(16);   gain_album_peak_db = val;
     300
     301        if (gain_title_db != 0) gain_title_db = OLD_GAIN_REF - gain_title_db;
     302        if (gain_album_db != 0) gain_album_db = OLD_GAIN_REF - gain_album_db;
     303        if (gain_title_peak_db != 0) {
     304                gain_title_peak_db = pow((double)10.0, (double)(gain_title_peak_db / (20*256))) / (double)(1 << 15);
     305        }
     306        if (gain_album_peak_db != 0) {
     307                gain_album_peak_db = pow((double)10.0, (double)(gain_album_peak_db / (20*256))) / (double)(1 << 15);
     308        }
    305309
    306310        return 0;
     
    480484
    481485        int packet_num = seek_sample / (1152*audio_block_frames);
     486
     487        // we need to seek back a little to avoid artifacts
     488        if (stream_version == 7) {
     489                if (packet_num > 32) {
     490                        packet_num -= 32;
     491                } else {
     492                        packet_num = 0;
     493                }
     494        }
     495
    482496        int i = (packet_num >> (seek_pwr - block_pwr));
    483497        if (i >= seek_table_size) {
    484498                i = seek_table_size-1;
    485499        }
     500
    486501
    487502        // seek to position
Note: See TracChangeset for help on using the changeset viewer.