<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>空雪小屋 &#187; 计算机应用</title>
	<atom:link href="http://blog.sorayuki.net/?cat=12&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.sorayuki.net</link>
	<description>现在域名是 blog.sorayuki.net ~</description>
	<lastBuildDate>Tue, 29 Nov 2022 08:27:41 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>在OBS直播软件中使用FDK-AAC编码器</title>
		<link>http://blog.sorayuki.net/?p=626</link>
		<comments>http://blog.sorayuki.net/?p=626#comments</comments>
		<pubDate>Wed, 31 Jan 2018 16:10:19 +0000</pubDate>
		<dc:creator><![CDATA[空雪梦见]]></dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[计算机应用]]></category>

		<guid isPermaLink="false">http://blog.sorayuki.net/?p=626</guid>
		<description><![CDATA[现在在直播中用的最多的软件可能就是OBS了。这个免费开源（https://github.com/jp9000/ &#8230; <a href="http://blog.sorayuki.net/?p=626" class="more-link">继续阅读<span class="screen-reader-text">在OBS直播软件中使用FDK-AAC编码器</span> <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>现在在直播中用的最多的软件可能就是OBS了。这个免费开源（<a title="https://github.com/jp9000/obs-studio" href="https://github.com/jp9000/obs-studio">https://github.com/jp9000/obs-studio</a>）的直播软件功能很强大，也没有烦人的小广告，不要注册不要登录，所有基于RTMP的直播平台都能用。</p>
<p>这个直播软件在编码直播音频流的过程中，支持使用很多种不同的AAC编码器。它大概会按照 Core-audio（苹果iTunes里的那个）、FDK-AAC、Windows Media Foundation、FFMpeg这样的顺序一个个找下去找到能用的。虽然是这个顺序，但是实际上在正常安装的OBS里面，是找不到 obs-libfdk.dll 这样一个文件的。安装的时候就不带这个文件。其实我之前也比较纳闷，这个如果效果这么好，那么为什么网上比较少见到哪里直接下载这个编码器的EXE文件呢。下午在一个群里提了这样的疑问，结果收到的回答大概是FDK-AAC发布源代码可以，但是因为其中涉及到一些什么专利许可证的问题，发布EXE、DLL这样的二进制文件好像是不行的。但是这些编码器里面，FDK-AAC在低码率HE-AAC v2模式下是公认的效果比较好。有的时候如果想拿来玩玩看用用看试试效果的话，就要自己从源代码编译了。</p>
<p><span id="more-626"></span></p>
<p>&nbsp;</p>
<p>对于从源代码编译这种事，有的开源软件搞起来连程序员都会感到头疼，更不要说一般主播了。值得庆幸的是搞这个OBS的FDK-AAC插件并不麻烦，OBS那边也只要编译这个插件就行了，不用编译整个项目，甚至它用的CMake软件都可以不装。</p>
<p>代码主要涉及到要下载的源代码也就obs-studio和fdk-aac这两套。obs-studio到obs的github版本发布页面（<a title="https://github.com/jp9000/obs-studio/releases" href="https://github.com/jp9000/obs-studio/releases">https://github.com/jp9000/obs-studio/releases</a>）找到我安装的那个版本的源代码包，下载下来就行。对于fdk-aac，也是到github上的版本发布页面（<a title="https://github.com/mstorsjo/fdk-aac/releases" href="https://github.com/mstorsjo/fdk-aac/releases">https://github.com/mstorsjo/fdk-aac/releases</a>）下载。我下载下来是obs-studio-21.0.1.zip和fdk-aac-0.1.5.tar.gz两个文件。代码有了以后然后就是编译器。我考虑到很多主播又不是程序员，也没必要装特别硕大的Visual Studio这样的东西，于是选了相对较小的TDM-GCC编译器：它下载来的安装包才几十兆。</p>
<p>接下来遇到的问题是编译FDK-AAC。它的代码解压出来以后发现，没有给MinGW用的Makefile……虽然有configure那一套脚本，但是那还要装unix的sh环境，麻烦。我选择的方法是把它做给VC用的那个Makefile.vc拿来改改，改成Makefile.tdm。然后要对它进行修改，首先我们用的编译器不是VC，所以可执行文件的名字也就不是 cl 和 link、lib这种。因为这边只要编译成静态库、在链接obs插件的时候用就行了，所以link可以丢那边不管，直接把 AR = lib 改成 AR = ar 即可。然后是下面那个 CFLAGS，用的完全是VC的那一套参数。改成gcc用的就好了，我是这么改的：</p>
<pre>改之前：
CFLAGS   = /nologo /W3 /Ox /MT /EHsc /Dinline=__inline $(TARGET_FLAGS) $(AM_CPPFLAGS) $(XCFLAGS)
改之后：
CFLAGS   =  -O2 -Dinline=__inline $(TARGET_FLAGS) $(AM_CPPFLAGS) $(XCFLAGS)</pre>
<p>总之就是往简单了去。然后还有生成静态库时候的命令，找到 $(STATIC_LIB): $(FDK_OBJS) 这边，下面的命令我直接改成</p>
<pre>	$(AR) $(ARFLAGS) qf $@ $(FDK_OBJS)
	$(AR) $(ARFLAGS) s $@</pre>
<p>这样了。</p>
<p>还不算完成，因为nmake用的默认编译规则的语法和mingw32-make的不一样，所以还有一个地方要改。找到 .cpp.obj: 这个规则，改成 %.obj : %.cpp。这样就可以了。</p>
<p>然后拿到这样的Makefile.tdm之后，在TDM-GCC环境里面，用命令行 mingw32-make -f Makefile.tdm fdk-aac.lib，它能给你出个静态库出来。这一步就算完成了。</p>
<p>下一步是编译OBS的插件了。这个OBS插件用的FDK-AAC的头文件是把FDK里面那些所有include文件夹里的头文件全部放在一起的。所以在编译之前有个步骤要做，就是把头文件都放一起。方法是先新建一个文件夹比如叫 fdkinc，然后在里面创建 fdk-aac 文件夹，用一个for命令把头文件搞过来：</p>
<p>for /f %%a in ('dir include /s /b /ad') do copy /y "%%~a\*" ..\fdkinc\fdk-aac</p>
<p>于是现在环境够了，可以开始编译插件那个DLL文件了。</p>
<p>编译插件的时候也有个地方其实是缺的，那就是连接到 obs.dll 用的导入库。这个导入库正常来说，是编译obs的过程中生成的。现在我们没有，要手工做一个。TDM-GCC里有给你做这个的工具，大体上来说就是把插件中要用到的 obs.dll 里面的函数都列出来，写成一个 def 文件，比如这次用的是这样的：</p>
<pre>LIBRARY obs.dll
EXPORTS 
obs_data_set_default_int 
blog 
bfree 
obs_properties_create 
obs_properties_add_int 
obs_properties_add_bool 
obs_data_get_int 
obs_data_get_bool 
obs_encoder_audio 
bmalloc 
audio_output_get_channels 
audio_output_get_sample_rate 
obs_register_encoder_s 
text_lookup_getstr 
text_lookup_destroy 
obs_module_load_locale 
obs_data_set_default_bool 
</pre>
<p>保存成 obs.def，用dlltool命令：</p>
<p>dlltool --input-def=obs.def --output-lib=obs.lib</p>
<p>就出来lib了。现在可以编译链接插件了，进到obs-studio-21.0.1\plugins\obs-libfdk文件夹，一行命令：</p>
<p>gcc -shared -oobs-libfdk.dll -O2 -I"../../libobs" -I"../../../fdkinc" obs-libfdk.c "../../../fdk-aac-0.1.5/fdk-aac.lib" "../../../obs.lib"</p>
<p>这样就可以获得一个 obs-libfdk.dll 了。这个文件丢到 obs 的 plugins 文件夹对应的地方（32bit就放32bit，64bit就放64bit，看用的是什么版本的TDM-GCC编译器）。</p>
<p>这整个过程我写了个bat文件来完成。源代码文件放进来，然后tdm-gcc装到 tdm64 文件夹，运行bat就能生成DLL。但是我没做clean，所以32编完之后想要64的话要删掉全部文件重新来一次，64编完想要32的也是一样。</p>
<p>附：在 obs-libfdk.c 文件里，找到 //MPEG-4 AAC-LC 注释，前面有个数字是2，改成29就可以用 HE-AAC v2了。用5是没有v2的HE。</p>
<p><a href="http://blog.sorayuki.net/wp-content/uploads/2018/02/build-obs-libfdk.7z">点击下载： build-obs-libfdk</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sorayuki.net/?feed=rss2&#038;p=626</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>将系统迁移至SSD</title>
		<link>http://blog.sorayuki.net/?p=387</link>
		<comments>http://blog.sorayuki.net/?p=387#comments</comments>
		<pubDate>Tue, 04 Mar 2014 15:14:18 +0000</pubDate>
		<dc:creator><![CDATA[空雪梦见]]></dc:creator>
				<category><![CDATA[计算机应用]]></category>

		<guid isPermaLink="false">http://blog.sorayuki.net/?p=387</guid>
		<description><![CDATA[在奖学金发下来之后，我就按照原计划用它买了一块固态硬盘。最终选了浦科特M5M 128GB，京东上购入的。 在固 &#8230; <a href="http://blog.sorayuki.net/?p=387" class="more-link">继续阅读<span class="screen-reader-text">将系统迁移至SSD</span> <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>在奖学金发下来之后，我就按照原计划用它买了一块固态硬盘。最终选了浦科特M5M 128GB，京东上购入的。</p>
<p><span id="more-387"></span>
<p>在固态硬盘拿到之后，自然要做的就是把系统弄到上面去。虽然说重装是一种比较保险的选择，但是整个系统已经装了那么多更新和软件，系统设置也已经调成平时使用习惯的情况下，要重装系统，实在是很不情愿。有办法把整个系统移动过去，自然是最好的选择，我也是这么尝试的。</p>
<p>我原来用的那一台笔记本上我也做过这样的系统迁移，要说成功也应该能算成功吧，总之到了最后没有从SSD引导，是从原来的机械硬盘引导，然后Win7的引导管理程序来启动SSD上的系统。那台电脑一直这么用着，到了最后也还保留着原来的C盘用于引导。</p>
<p>现在这台电脑，把固态硬盘装上去之后就想当然地到Win7控制面板计算机管理里面的磁盘管理里把分区建立起来，整个SSD就一个区（<font color="#ff0000">注意：这个过程完成后是失败的</font>），设置为活动分区，然后重启用PE盘引导，把现在的C盘给Ghost过去。用深山红叶PE盘（烧入优盘的情况下）引导的时候要注意，<font color="#ff0000">优盘要插在电脑的USB2.0口上</font>，如果插在USB3.0的口上，引导以后会只有一个RAM盘，认不到优盘的，也就没办法使用上面的工具。以及，<font color="#ff0000">BIOS里要把SATA控制器的模式设置为IDE</font>，不然进了PE系统（Windows 2003的好像）后，看不到任何硬盘的。总之<font color="#ff0000">要进PE的时候设成IDE，要进硬盘上系统的时候设成AHCI，因为我当初装Win7的时候是在AHCI模式下装的</font>。</p>
<p>在把原来的C盘给复制到固态硬盘上之后，我就尝试从SSD引导。但是很可惜这样是失败的，它报错说找不到BOOTMGR，而且确实C盘本来就没有这个文件。不过这时候我想起了装系统的时候它给我建立的那个100MB的分区：在使用Win7安装盘装系统的时候，如果硬盘没有分区，在安装程序里建立分区的时候，它会给你搞一个100MB的分区出来，说是“系统保留”，没错吧。在用深山红叶PE盘引导到系统以后，进这个100MB的分区，能看到里面有BOOTMGR这样的文件。现在我才反应过来，之前都没有注意到，<font color="#ff0000">其实原来机械硬盘上的活动分区，不是系统里看到的那个C盘，而是默认情况下没有分配盘符的“系统保留”分区</font>。</p>
<p>那么为了顺利迁移系统，我就又重新<font color="#ff0000">给SSD分区：创建两个主分区，一个是100MB并设置为活动分区，剩下的全部给另一个分区（也是主分区）。如果是用系统自带的diskpart工具分区，注意create partition primary的时候加上align=64这样的参数，以确保SSD能4k对齐</font><font color="#000000">。我当时用的好像是align=4……记得不太清楚了。</font></p>
<p><font color="#000000">分区<font color="#ff0000">并设置活动分区</font>以后，就<font color="#ff0000">用GHOST照着复制</font>就是了，机械硬盘上的100MB分区对应SSD上的100MB分区，机械硬盘上的C盘对应SSD上的另一个分区。在复制完成之后，<font color="#ff0000">在BIOS设置里把SATA控制器调成AHCI模式</font>，然后从SSD引导，可以进入系统。<font color="#ff0000">但是此时进入的系统是机械硬盘上的系统</font>，SSD只是负责引导。</font></p>
<p><font color="#000000">然后下一步是修改引导，让它启动SSD上的系统。我的做法是<font color="#ff0000">下了一个Visual BCD软件</font>，装上去以后启动，<font color="#000000">如果不确定它现在到底用的是SSD上的启动管理器还是机械盘上的启动管理器，可以在给SSD上的“系统保留”分区分配盘符之后，用Store菜单的Open Store选择里面的启动文件，是Boot文件夹（隐藏的）下的BCD文件</font>。<font color="#ff0000">在Loaders右键新建一个Vista/7 Loader，然后设置一下这个Loader的启动盘符</font>（<font color="#ff0000">OSDevice和ApplicationDevice两个都要调</font>），之后重启。</font></p>
<p><font color="#000000">重启以后从SSD引导的话应该就能看到启动菜单了，<font color="#ff0000">选择刚刚新建的那个</font>看看能不能进系统，这个时候应该是能体会到系统启动速度明显变快了。但是<font color="#ff0000">这样还不够，因为进入系统你会发现C盘还是原来的C盘，SSD的系统分区是其他什么盘符。也就是说，需要用到C盘上的文件的时候仍然是引用机械硬盘上的</font>。而我的目的是机械硬盘上的系统分区整个迁移过去。因为现在机械硬盘和SSD上的系统分区是完全一样的（因为是GHOST复制的），所以其实只要想办法调换一下盘符就可以了。</font></p>
<p><font color="#000000">但是操作的时候会发现，因为其中有一个是系统分区，所以在磁盘管理里面根本不能给它重设盘符。就算在安全模式下也不行。注意：<font color="#ff0000">不要尝试在安全模式下把分配给C盘的盘符删掉，我当时因为做了这样的事情到最后在命令行下重新装载C盘才让系统能重新启动的</font>。关于如何给C盘改盘符，我上网搜了一圈，找到了一个方法，就是修改注册表。</font></p>
<p><font color="#000000">比如说我现在机械盘上的系统分区是C盘，SSD被分配了个G盘，那么<font color="#ff0000">到注册表的HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices处，可以看到\DosDevices开头的一些键值。找到这两个分区的盘符以后，通过改名交换它们就可以了</font>：原来的C改成G、原来的G改成C。改的过程中需要把其中一个先改为其他什么临时的名字这个我就不多说了吧。</font></p>
<p><font color="#000000"><font color="#ff0000">改完以后重启</font>，再次进入系统应该就能看到C盘已经是SSD上的分区了（我的情况的话，因为机械盘的系统分区和SSD的不一样大小，所以一眼能识别出来）。启动啊干什么的<font color="#ff0000">稍微检查一下没问题的话，就可以再到Visual BCD里面，把原来的那个引导项（机械硬盘上的系统分区）给删除掉。</font>然后就可以把机械硬盘的系统分区格式化，挪作它用了。</font></p>
<p><font color="#000000">至此，系统迁移完成。</font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sorayuki.net/?feed=rss2&#038;p=387</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>解决Thinkpad按键盘会嘟嘟嘟的问题</title>
		<link>http://blog.sorayuki.net/?p=221</link>
		<comments>http://blog.sorayuki.net/?p=221#comments</comments>
		<pubDate>Sat, 09 Feb 2013 06:06:16 +0000</pubDate>
		<dc:creator><![CDATA[空雪梦见]]></dc:creator>
				<category><![CDATA[计算机应用]]></category>
		<category><![CDATA[问题解决]]></category>

		<guid isPermaLink="false">/?p=221</guid>
		<description><![CDATA[某网友昨日购置了一台Thinkpad笔记本电脑，正在琢磨着Windows 8如何使用的时候发现键盘输入某些特定 &#8230; <a href="http://blog.sorayuki.net/?p=221" class="more-link">继续阅读<span class="screen-reader-text">解决Thinkpad按键盘会嘟嘟嘟的问题</span> <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>某网友昨日购置了一台Thinkpad笔记本电脑，正在琢磨着Windows 8如何使用的时候发现键盘输入某些特定的字母组合的时候，如果按快了电脑就会嘟嘟响。又不是输入法提示不能输入的那种（那个暂时就知道微软拼音会……）。</p>
<p>同时对方强调说，除了输入快，同时按下去的时候也会嘟嘟响。于是就从这里下手。因为自己没有用过thinkpad嘛，然后这个嘟嘟我觉得很可能是原来由主板上的蜂鸣器响的（笔记本没有蜂鸣器，于是就转为在声卡嘟嘟嘟了）。要么在BIOS里面关闭？</p>
<p>自己实在是没有经验，于是上网搜。又一次证实了百毒不知道和搜搜问不答：汝机过热而哔之，扇风可解矣（呸）。不靠谱，那只好搜英文。</p>
<p>搜英文thinkpad和beep和keyboard，找到了一些说这个问题的网页，看来确实是通病，但是人家不会汝机过热而哔之，人家给出解决方案了：</p>
<p>我进的是 <a title="http://www.intelliot.com/2006/12/thinkpad-keyboard-beeps-fixed/" href="http://www.intelliot.com/2006/12/thinkpad-keyboard-beeps-fixed/">http://www.intelliot.com/2006/12/thinkpad-keyboard-beeps-fixed/</a> 这个网页，它说，</p>
<p><span id="more-221"></span></p>
<p>&nbsp;</p>
<p>到设备管理器里面，查看菜单开启显示隐藏设备，然后到非即插即用设备里面找到beep，属性里面把启动方式改为禁止。</p>
<p>于是我就把这个发给该网友。但是网上给出解决方案对应的不是win8系统，最后果然对方回馈说设备管理器里面没有非即插即用设备。</p>
<p>此时吾辈一眼瞄到那个网页的图里面，有说到beep那个设备“对应的服务是beep”，那去禁用服务就好了嘛。我自己到自己电脑上进控制面板管理工具的服务，没发现beep。看来是要靠命令行来解决。</p>
<p>在管理员命令提示符里面运行 sc query beep，果然是有beep服务的。然后尝试停止它，sc stop beep，提示进入stop_pending状态，过一会儿查看，还是pending。尼玛关不掉……那就禁用它然后重启吧。自己懒得试了于是直接和那个网友说到管理员命令提示符里面去 sc config beep start= disabled 之后重启。</p>
<p>今天早上上q的时候发现有回复了，说是它不嘟嘟了。</p>
<p>百毒不知道和搜搜问不答的不靠谱程度……哎，其实不用我说，我想大家都有体会都知道（（（</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sorayuki.net/?feed=rss2&#038;p=221</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>终于把Windows Live Writer装到电脑上去了</title>
		<link>http://blog.sorayuki.net/?p=99</link>
		<comments>http://blog.sorayuki.net/?p=99#comments</comments>
		<pubDate>Sat, 13 Oct 2012 13:05:40 +0000</pubDate>
		<dc:creator><![CDATA[空雪梦见]]></dc:creator>
				<category><![CDATA[计算机应用]]></category>

		<guid isPermaLink="false">http://blog.sorayuki.net/?p=99</guid>
		<description><![CDATA[以前用的它自带那个安装包来装，装了半死总是给我出错，装不上。 今天用磁盘碎片整理软件整理碎片的时候，猛然发现它 &#8230; <a href="http://blog.sorayuki.net/?p=99" class="more-link">继续阅读<span class="screen-reader-text">终于把Windows Live Writer装到电脑上去了</span> <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>以前用的它自带那个安装包来装，装了半死总是给我出错，装不上。</p>
<p>今天用磁盘碎片整理软件整理碎片的时候，猛然发现它移动的文件里面有一个叫做writer.msi的，而且在Windows Live文件夹下。赶快去顺着它显示的路径找找，找到了C:\Program Files\Common Files\Windows Live\.cache里面，有好多文件夹，里面有writer.msi文件还有writerlang.msi（一看就是语言包吧？）。装上去以后发现没可执行程序……好吧，看来刚才找到的那个看起来文件名有点相关的writerprod.msi和writerprodlang.msi也是有关系的。装，然后开始菜单的Windows Live里面终于出现Writer了。</p>
<p>现在我也可以用它来写日志了，比如这篇就是XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sorayuki.net/?feed=rss2&#038;p=99</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
