婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > wma tag 批量修改[原代碼-從wmfsdk中修改]

wma tag 批量修改[原代碼-從wmfsdk中修改]

熱門標簽:生化危機3原版地圖標注 電銷客服機器人價格 地圖標注的聊天案例 江門申請400電話 慶陽電腦外呼系統代理商 智能外呼系統的劣勢 騰訊搜狗地圖標注在哪里 泉州呼叫中心外呼系統多少錢 定位地圖標注
wma tag 批量修改[原代碼-從wmfsdk中修改]
代碼是自己做音樂站點時寫的,沒有仔細檢查,用他修改了近7萬的 wma,mp3暫時還沒有發現出錯。需要的朋友可以自己修改一下。
效率:5萬音樂 70G音樂數據需要差不多3個多小時,程序沒有優化。
編譯環境: vc6.0 + WMFSDK9(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmform95/htm/aboutthewindowsmediaformatsdk.asp)
注意:使用前請先做實驗,你的音樂數據搞壞了我是不責任的咯~~~
提示:其實程序本身寫得不是很好,提供的這些資料你能在wma 中嵌入歌詞包括動態歌詞,另外wma 中加入script 可以防止偷連,給需要用的人吧!
包含三個文件 wmatag.cpp, config.txt, input.txt
config.txt (詳細請參見MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmform95/htm/attributelist.asp )
復制代碼 代碼如下:

FileName
Title
Author
Copyright
CopyrightURL
Description
WM/AlbumTitle
WM/Composer
WM/Lyrics

input.txt (這個文件是你的批量修改的信息,需要從數據庫生成)
復制代碼 代碼如下:

j:\music\abc\xxxyyy.wma|第十六屆Cash流行曲創作大賽-懶醒|雜錦合輯|版權為原作者所有,所有音樂收集自互聯網。|http://www.yoursite.com|yoursite....|第十六屆Cash流行曲創作大賽|yoursite|歌詞
j:\music\abd\yyyyy.wma|毅憂未盡_預購限量版-左鞋右穿-搶先試聽版|陸毅|版權為原作者所有,所有音樂收集自互聯網。|http://www.yoursite.com|xxxyy|毅憂未盡_預購限量版|yoursite|歌詞
...

wmatag.cpp
復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <stdio.h>
#include <string.h>
#include <wmsdk.h>
#pragma comment( lib, "wmvcore.lib" )
#pragma comment( lib, "Rpcrt4.lib" )
#define FIELD_NUM        9
#define FIELD_LEN        1024
char __sFileName[ MAX_PATH ];
#ifndef SAFE_RELEASE
#define SAFE_RELEASE( x )       \
    if( NULL != x )             \
    {                           \
        x->Release( );          \
        x = NULL;               \
    }
#endif // SAFE_RELEASE
#ifndef SAFE_DELETE
#define SAFE_DELETE( x )        \
    if( NULL != x )             \
    {                           \
        delete x;               \
        x = NULL;               \
    }
#endif // SAFE_DELETE
#ifndef SAFE_ARRAYDELETE
#define SAFE_ARRAYDELETE( x )   \
    if( NULL != x )             \
    {                           \
        delete [] x;            \
        x = NULL;               \
    }
#endif // SAFE_ARRAYDELETE
#ifndef UNICODE
HRESULT ConvertMBtoWC( LPCTSTR ptszInString, LPWSTR *ppwszOutString )
{
    if( ptszInString == NULL || ppwszOutString == NULL ){
        return( E_INVALIDARG );
    }
    HRESULT hr          = S_OK;
    int     nSizeCount  = 0;
    *ppwszOutString     = NULL;
    do
    {
        //
        // Get the memory reqd for this string
        //
        nSizeCount = MultiByteToWideChar( CP_ACP, 0, ptszInString, -1, NULL, 0 );
        if( 0 ==  nSizeCount )
        {
            hr = HRESULT_FROM_WIN32( GetLastError() );
            break;
        }
        *ppwszOutString = new WCHAR[ nSizeCount ];
        if( NULL == *ppwszOutString )
        {
            hr = HRESULT_FROM_WIN32( GetLastError() );
            break;
        }
        if( 0 == MultiByteToWideChar( CP_ACP, 0, ptszInString, -1, *ppwszOutString, nSizeCount ) )
        {
            hr = HRESULT_FROM_WIN32( GetLastError() );
            break;
        }
    }
    while( FALSE );
    if( FAILED( hr ) )
    {
        SAFE_ARRAYDELETE( *ppwszOutString );
        _tprintf( _T( "Internal error ( hr=0x%08x )\n" ), hr );
    }
    return( hr );
}
#endif // UNICODE
HRESULT editorOpen( WCHAR* _wma_file, IWMMetadataEditor ** ppEditor, IWMHeaderInfo ** ppHeaderInfo )
{
    if( ( NULL == _wma_file ) || ( NULL == ppEditor ) ){
        return( E_INVALIDARG );
    }
    HRESULT hr = S_OK;
    do
    {
        hr = WMCreateEditor( ppEditor );
        if( FAILED( hr ) ){
            _tprintf( _T( "Could not create Metadata Editor ( hr=0x%08x ).\n" ), hr );
            break;
        }
        hr = ( *ppEditor )->Open( _wma_file );
        if( FAILED ( hr ) ){
            _tprintf( _T( "Could not open the file %ws ( hr=0x%08x ).\n" ), 
                _wma_file, hr );
            break;
        }
        if( NULL != ppHeaderInfo ){
            hr = ( *ppEditor )->QueryInterface( IID_IWMHeaderInfo, 
                                                (void **)ppHeaderInfo );
            if( FAILED( hr ) ){
                _tprintf( _T( "Could not QI for IWMHeaderInfo ( hr=0x%08x ).\n" ), hr );
                break;
            }
        }
    }
    while( FALSE );
    return( hr );
}
HRESULT SetAttrib( WCHAR * _wma_file, WCHAR * pName, WCHAR * pValue )
{
        WORD wStreamNum = 0;
        WORD wAttribType = WMT_TYPE_STRING;
    if( ( NULL == _wma_file ) || ( NULL == pName ) || ( NULL == pValue ) ){
        return( E_INVALIDARG );
    }
    HRESULT hr = S_OK;
    IWMMetadataEditor   * pEditor       = NULL;
    IWMHeaderInfo       * pHeaderInfo   = NULL;
    BYTE*               pbAttribValue   = NULL;
    WORD                wAttribValueLen = 0;
    WMT_ATTR_DATATYPE   AttribDataType  = ( WMT_ATTR_DATATYPE ) wAttribType;
    DWORD               dwAttribValue   = 0;
    WORD                wAttribValue    = 0;
    QWORD               qwAttribValue   = 0;
    BOOL                fAttribValue    = 0;
    do
    {
        hr = editorOpen( _wma_file, &pEditor, &pHeaderInfo );
        if(FAILED( hr ) ){
            break;
        }
                /*
                        Attrib type = string...        
                */
        wAttribValueLen = ( wcslen( pValue ) + 1 )* sizeof( WCHAR );
        pbAttribValue = (BYTE *)pValue;
        hr = pHeaderInfo->SetAttribute( wStreamNum,
                                        pName,
                                        AttribDataType,                                        
                                        pbAttribValue,
                                        wAttribValueLen );
        if( FAILED( hr ) ){
            _tprintf( _T( "SetAttribute failed for Attribute name %ws ( hr=0x%08x ).\n" ), 
                pName, hr );
            break;
        }
        hr = pEditor->Flush();
        if( FAILED( hr ) ){
            _tprintf( _T( "Could not flush the file %ws ( hr=0x%08x ).\n" ), 
                _wma_file, hr );
            break;
        }
        hr = pEditor->Close();
        if( FAILED( hr ) ){
            _tprintf( _T( "Could not close the file %ws ( hr=0x%08x ).\n" ), 
                _wma_file, hr );
            break;
        }
    }
    while( FALSE );
    SAFE_RELEASE( pHeaderInfo );
    SAFE_RELEASE( pEditor );
    return( hr );
}
HRESULT __SetAttrib( WCHAR * _wma_file, WCHAR ** pName, WCHAR ** pValue )
{
        WORD wStreamNum = 0;
        WORD wAttribType = WMT_TYPE_STRING;
        int i;
    if( ( NULL == _wma_file ) || ( NULL == pName ) || ( NULL == pValue ) ){
        return( E_INVALIDARG );
    }
    HRESULT hr = S_OK;
    IWMMetadataEditor   * pEditor       = NULL;
    IWMHeaderInfo       * pHeaderInfo   = NULL;
    BYTE*               pbAttribValue   = NULL;
    WORD                wAttribValueLen = 0;
    WMT_ATTR_DATATYPE   AttribDataType  = ( WMT_ATTR_DATATYPE ) wAttribType;
    DWORD               dwAttribValue   = 0;
    WORD                wAttribValue    = 0;
    QWORD               qwAttribValue   = 0;
    BOOL                fAttribValue    = 0;
    do
    {
        hr = editorOpen( _wma_file, &pEditor, &pHeaderInfo );
        if(FAILED( hr ) ){
            break;
        }
                for( i = 1; i < FIELD_NUM; i ++ ){
                                                //SetAttrib( _wma_file, attribNames[ i ], fields[ i ] );
                                                //printf( "%d: %s\n", i, fields[ i ] );
                        /*
                                Attrib type = string...        
                        */
                wAttribValueLen = ( wcslen( pValue[ i ] ) + 1 )* sizeof( WCHAR );
                pbAttribValue = (BYTE *)pValue[ i ];
                hr = pHeaderInfo->SetAttribute( wStreamNum,
                                        pName[ i ],
                                        AttribDataType,                                        
                                        pbAttribValue, 
                                        wAttribValueLen );
                if( FAILED( hr ) ){
                    _tprintf( _T( "SetAttribute failed for Attribute name %ws ( hr=0x%08x ).\n" ), pName[ i ], hr );
                    break;
                }
                }
        hr = pEditor->Flush();
        if( FAILED( hr ) ){
            _tprintf( _T( "Could not flush the file %ws ( hr=0x%08x ).\n" ), 
                _wma_file, hr );
            break;
        }
        hr = pEditor->Close();
        if( FAILED( hr ) ){
            _tprintf( _T( "Could not close the file %ws ( hr=0x%08x ).\n" ), 
                _wma_file, hr );
            break;
        }
    }
    while( FALSE );
    SAFE_RELEASE( pHeaderInfo );
    SAFE_RELEASE( pEditor );
    return( hr );
}
bool get_info( WCHAR **fields, int num , char *input ){
        int seg = 0;
        char *s = input;
        char buffer[ 1024 * 4 ] = { 0x00 };
        __sFileName[ 0 ] = 0x00;
        for( char *p = input; *p != 0x00 ; p ++ ){
                if( *p == '|' ){
                        *p = 0x00;
                        strcpy( buffer, s );
                        if( __sFileName[ 0 ] == 0x00 )
                                strcpy( __sFileName, s );
                HRESULT hr = ConvertMBtoWC( buffer, &fields[ seg ] );
                if( FAILED( hr ) ){
                           break;
                }
                buffer[ 0 ] = 0x00;                
                        //strcpy( fields[ seg ], s );
                        s = p + 1;
                        seg ++;
                        if( seg == num - 1 ){
                                if( *s != 0x00 ){
                                        strcpy( buffer, s );
                                        hr = ConvertMBtoWC( buffer, &fields[ seg ] );
                                        //strcpy( fields[ seg ], s );
                                }
                                break;
                        }
                }
        }
        if( seg == num - 1 )
                return true;
        else
                return false;
}
int loadConfig( WCHAR **attribNames ){
        char buffer[ 1024 ];
        FILE *fp;
        int i = 0;
        HRESULT hr = S_OK;
        fp = fopen( "config.txt", "rb" );
        if( !fp ){
                perror( "fopen( config.txt )" );
                return -1;
        }
        while( !feof( fp )){
                if( fgets( buffer, sizeof( buffer ), fp ) ){
                        if( strlen( buffer ) < 3 )
                                continue;
                        for( int j = 0; j < (int)strlen( buffer ); j ++ ){
                                if( buffer[ j ] == 0x0a || buffer[ j ] == 0x0d )
                                        buffer[ j ] = 0x00;
                        }
                        hr = ConvertMBtoWC( buffer, &attribNames[ i ] );
                        if( FAILED( hr ) )
                                break;
                        else
                                i ++;
                }
        }
        fclose( fp );
        if( FAILED( hr ) )
                return -1;
        else
                return i;
}
 
復制代碼 代碼如下:

int main( void ){
        WCHAR *fields[ FIELD_NUM ];
        WCHAR *attribNames[ 128 ] = { 0x00 };
        int i;
        int j = 0;
        int fieldNum = loadConfig( attribNames );
        printf( "%d\n", fieldNum );
        for( i = 0; i < 128; i ++ ){
                if( attribNames[ i ] )
                        _tprintf( _T( "%ws %ws\n"), attribNames[ i ], _T( "hello go....") );
        }
        char input[ 1024 * 4 ];
        FILE *fp = fopen( "input.txt", "rb" );
        if( !fp ){
                perror( "fopen( )" );
                return -1;        
        }
        while( !feof( fp ) ){
                input[ 0 ] = 0x00;
                if( fgets( input, sizeof( input ), fp ) ){
                        for( i = 0; i < FIELD_NUM; i ++ )
                                fields[ i ] = NULL;
                        j ++;
                        if( j % 100 == 0 )
                                printf( "files: %d\n", j );
                        bool st = get_info( fields, FIELD_NUM, input );
                        if( st == false )
                                printf( "status: %s\n", st?"true":"false" );
                        //printf( "status: %s\n", st?"true":"false" );
                        if( st ){
                                WCHAR * _wma_file = fields[ 0 ];
                                FILE *fp = fopen( __sFileName, "rb" );
                                if( fp ){
                                        fclose( fp );
                                        //puts( __sFileName );
                                        __SetAttrib( _wma_file, attribNames, fields );
                                        /*
                                        for( i = 1; i < FIELD_NUM; i ++ ){

                                                SetAttrib( _wma_file, attribNames[ i ], fields[ i ] );
                                                //printf( "%d: %s\n", i, fields[ i ] );
                                        }
                                        */
                                }
                        }
                        for( i = 0; i < FIELD_NUM; i ++ )
                                SAFE_ARRAYDELETE( fields[ i ] );                
                }                                
        }
        fclose( fp );
        return 0;
}
 

標簽:萍鄉 邢臺 那曲 辛集 來賓 鷹潭 山西 錫林郭勒盟

巨人網絡通訊聲明:本文標題《wma tag 批量修改[原代碼-從wmfsdk中修改]》,本文關鍵詞  wma,tag,批量,修改,原,代碼,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《wma tag 批量修改[原代碼-從wmfsdk中修改]》相關的同類信息!
  • 本頁收集關于wma tag 批量修改[原代碼-從wmfsdk中修改]的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩国产电影| 国产一区二区h| 成人国产一区二区三区精品| 色综合 综合色| 欧美日韩一区在线| 日韩免费在线观看| 99这里只有精品| 国产精品一区二区黑丝| 美女被吸乳得到大胸91| 成人午夜激情视频| 国产中文一区二区三区| 久久综合色婷婷| 亚洲国产精华液网站w | 日韩成人免费看| 蜜桃久久久久久久| 成人午夜视频在线观看| 欧美日韩一本到| 久久综合久久综合九色| 亚洲黄色片在线观看| 久久久久国产精品麻豆ai换脸| 综合分类小说区另类春色亚洲小说欧美| 毛片av一区二区| 成人免费高清视频| 久久亚洲精品小早川怜子| 一区二区三区精品久久久| 亚洲影视在线观看| 无吗不卡中文字幕| 91精品欧美一区二区三区综合在 | 中文字幕亚洲成人| 极品少妇一区二区三区精品视频| 91亚洲精品久久久蜜桃| 久久久亚洲综合| 国产伦精品一区二区三区视频青涩 | 国产欧美视频一区二区| 中文子幕无线码一区tr| 免费高清在线视频一区·| 激情综合色综合久久| 91福利在线看| 久久亚洲影视婷婷| 日精品一区二区| 亚洲欧洲精品一区二区三区| 午夜久久久久久| 成人免费一区二区三区视频| 午夜精品免费在线观看| 亚洲妇女屁股眼交7| 粉嫩嫩av羞羞动漫久久久| 欧美一区日韩一区| 夜夜夜精品看看| 色婷婷av一区二区三区大白胸| 国产视频视频一区| 国产一区二区伦理| 麻豆91在线观看| 国产精品污www在线观看| 91视频免费播放| 天堂影院一区二区| 国产无遮挡一区二区三区毛片日本| 色婷婷狠狠综合| 国产精品一区在线观看你懂的| 欧美精品在线观看播放| 久久99精品久久久久久动态图| 国产精品久久久久久久午夜片 | 蜜桃久久久久久| 成人免费一区二区三区在线观看| 欧美日韩在线观看一区二区| 激情久久五月天| 三级欧美韩日大片在线看| 国产欧美日韩综合精品一区二区| 国产午夜精品一区二区三区视频| 91精品国产乱| 这里是久久伊人| 欧美日韩精品一区二区三区| 国产露脸91国语对白| av网站免费线看精品| 国产精品丝袜久久久久久app| 久久久99免费| 国产三级一区二区| 色94色欧美sute亚洲线路一ni | 欧美va亚洲va香蕉在线| 国产一区美女在线| 欧美成人精品3d动漫h| 成人av动漫在线| 亚洲黄色免费网站| 欧美优质美女网站| 亚欧色一区w666天堂| 欧美一区二区黄| 国产成人在线观看免费网站| 国产精品九色蝌蚪自拍| 国产成人免费在线观看| 国产精品毛片久久久久久久| 99精品视频一区二区三区| 一区二区三区四区五区视频在线观看| 综合欧美亚洲日本| 国产欧美日韩卡一| 亚洲va国产天堂va久久en| 性欧美疯狂xxxxbbbb| 粉嫩aⅴ一区二区三区四区五区| 国产综合久久久久影院| 91小视频在线| 欧美三日本三级三级在线播放| 欧美一级爆毛片| 亚洲人成人一区二区在线观看| 色欧美日韩亚洲| 国产在线精品一区二区夜色| 从欧美一区二区三区| 久久女同性恋中文字幕| 天天综合网天天综合色| 成人aa视频在线观看| 日韩欧美一二三区| 亚洲成a人片在线不卡一二三区 | 欧美精品一区二区三区久久久| 久久久精品人体av艺术| ㊣最新国产の精品bt伙计久久| 日韩黄色一级片| 日韩欧美中文字幕精品| 国产精品久久久久影院色老大| 亚洲国产精品精华液网站| 国内精品久久久久影院色| 亚洲午夜免费电影| 久久精品国产亚洲a| 欧美日韩精品一区二区天天拍小说 | 久久看人人爽人人| 99国产精品99久久久久久| 男人的j进女人的j一区| 亚洲九九爱视频| 欧美激情一区二区三区蜜桃视频| 欧美片在线播放| 色婷婷久久综合| 久久精品国产久精国产| 欧美日韩一区二区在线视频| 五月综合激情网| 日韩欧美国产一区二区三区| 日韩国产欧美三级| 久久综合九色综合97婷婷| 91在线视频网址| 亚洲综合偷拍欧美一区色| 波多野结衣欧美| 亚洲成av人片www| 欧美日韩大陆在线| 懂色中文一区二区在线播放| 欧美午夜不卡视频| 国产自产2019最新不卡| 一区二区三区美女| 日韩精品中文字幕在线不卡尤物| 亚洲午夜久久久久久久久电影院| 欧美一区二区二区| 色噜噜狠狠色综合欧洲selulu| 男人的j进女人的j一区| 国产精品拍天天在线| 日韩一区二区在线观看视频| 91一区一区三区| 国产成人午夜电影网| 国产精品一区二区在线观看不卡| 亚洲女子a中天字幕| 国产欧美日韩在线| 欧美欧美午夜aⅴ在线观看| 91小视频免费观看| 丁香激情综合国产| 一区二区日韩av| 91精品久久久久久蜜臀| 不卡av在线网| 韩国女主播成人在线| 亚洲第一综合色| 国产成人精品www牛牛影视| 国产精品伦理一区二区| 国产在线麻豆精品观看| 亚洲精品成人在线| 亚洲午夜久久久久久久久电影网| 亚洲一区二区在线观看视频| 亚洲成人激情av| 麻豆传媒一区二区三区| 国产一区二区精品久久91| 国产黄色精品网站| 色婷婷综合久久| 日韩欧美一级二级| 亚洲国产精品av| 亚洲综合另类小说| 视频一区欧美精品| 99久久精品免费观看| 成人小视频在线| 色哟哟一区二区三区| 欧美乱妇23p| 亚洲欧洲在线观看av| 一区二区三区波多野结衣在线观看| 日韩理论片一区二区| 日韩欧美国产三级| 国产亚洲欧美激情| 亚洲精品视频在线看| 偷拍与自拍一区| 成人av影视在线观看| 日本一区二区久久| 精品福利在线导航| 亚洲一区二区三区四区在线| 天堂久久一区二区三区| 狠狠色丁香久久婷婷综合_中| 福利一区二区在线观看| 在线不卡的av| 一区二区三区蜜桃| av一区二区不卡| 久久久久免费观看| 日本不卡一区二区三区|