消除Mac开机“咚”声的方法



  • 消除Mac开机“咚”声的方法

    2222.jpg
    Mac计算机系统很棒,它的笔记本很薄,适合携带,让我很方便地随时办公。不过,老款的Mac有一个毛病,就是开机总有“咚”的一声。它令我们很尴尬,也让我们吓一跳。所以我们想要是有删除“咚”声的办法就好了。
    最开始我想要是能够将“咚”声替换成我想要的开机声音就好了。后面发现似乎不行(只有Mac的系统工程师才能做到吧),因为这其中有一段较长的历史渊源(以下来自网络)

    苹果电脑著名的启动声音是由 Jim Reekes 使用他在 1991 年的那台价值 7000 美元的 Quadra 700 上录制的,而这段声音来自其个人工作室里的 Korg Wavestation 合成器,他双手撑开到尽可能大,弹下了这个大三和弦。
    为什么用这个音色?Reekes 只是说他感觉这个声音“最正”而已,他想要的就是这种很宽、即便高音也有着很重的低音、有着锋利的起音的声音。Wavestation 里的这个音色有点类似管风琴,又具备敲击感。
    最后,Reekes 又加入了一些附加音色,做了立体声移相和混响效果使声音的谐波更丰富。
    Reekes 知道自己的声音将被苹果用户所熟知,尤其是那些经常要重启电脑的用户,所以他在设计声音的时候也考虑到了这一点,遇到崩溃而不得不重启绝对是一种跟开机完全不同的体验。所以 Reekes 想让自己的声音使用户联想到“调色板清洗剂”之类的清爽的东西,而不是电脑崩溃了。
    
    实际上 Reekes 操刀制作了很多苹果电脑的启动声音,从 1991 年开始历代苹果电脑的启动声音几乎都出自 Reekes 之手,一直沿用至今。有一次当 Reekes 最终调节好一个启动声音之后,ROM 工程师又在其基础上创建了新版本,他们做了一些微调,比如在首代 PowerMac 上加入了 Stanley Jordon 的吉他扫弦声音。Jim 对他们这个修改意见很大,因为那样声音将失去“力量”。ROM 工程师毕竟不是录音工程师,他们不熟悉音频,最终把 PowerMac 启动声音搞的听起来很神圣但毫无深度(没准因为那个 ROM 工程师是 Stanley Jordon 的粉丝?)
    
    当乔布斯在 1997 年回归苹果之后,据说他提出要让所有苹果电脑都具备统一的声音,并钦点说我就喜欢 Reekes 以前做的那种声音,于是没人敢在 Reekes 做的声音上做修改了。
    Reekes 并不是一个专职音乐人,他为苹果公司改造了最初的 Sound Manager,同时也是 QuickTime 的关键工程师之一,甚至 iPod 触摸轮背后也有他的贡献。
    

    去网上搜了很多办法,有一个是写脚本来实现的。我想我恰好也折腾过较多的Mac系统,也试试写一写脚本来实现这个效果看看。于是我就开始“牛刀小试”啦。

    #!/bin/sh
    echo '#!/bin/bash' >> sound-off.sh
    echo 'osascript -e "set volume output muted 1"' >> sound-off.sh
    chmod +x sound-off.sh
    sudo cp sound-off.sh /Library/Scripts
    
    echo '#!/bin/bash' >> sound-on.sh
    echo 'osascript -e "set volume 5"' >> sound-on.sh
    chmod +x sound-on.sh
    sudo cp sound-on.sh /Library/Scripts
    
    sudo defaults write com.apple.loginwindow LogoutHook /Library/Scripts/sound-off.sh
    sudo defaults write com.apple.loginwindow LoginHook /Library/Scripts/sound-on.sh
    

    如此,用终端输入或者是保存一个文件test.sh再添加可执行全权限(chmod +x test.sh)再在打开方式中选择终端就可以达到效果了!注意,其中可能要输入密码。怎么样?相比网上其它的方式是不是很简单?


Log in to reply
 

走马观花

最近的回复

  • C

    Qt for MCU需要商业授权的

    read more
  • Qt for MCUs

    搭建Qt for MCUs PC端开发环境。qt for mcus提供了一个完整的图形框架和工具包,包含了在MCUs上设计、开发和部署gui所需的一切。它允许您在裸机或实时操作系统上运行应用程序。

    先决条件

    开发主机环境支持仅限于Windows 10

    MSVC compiler v19.16 (Visual Studio 2017 15.9.9 or newer) x64

    CMake v3.13 or newer (you can install it using the Qt Online installer) x64

    使用Qt联机安装程序安装Qt for MCUs,该安装程序可通过Qt帐户下载

    安装Qt 5.14和Qt Creator 4.11 or higher

    安装链接

    › Qt: https://account.qt.io/downloads
    › CMake: https://cmake.org/download/
    › Python 2.7 32-bit: https://www.python.org/downloads/release/python-2716/
    › Arm GCC: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnutoolchain/gnu-rm/downloads
    › J-Link Software Pack: https://www.segger.com/downloads/jlink/JLink_Windows.exe
    › J-Link OpenSDA Firmware: https://www.segger.com/downloads/jlink/OpenSDA_MIMXRT1050-EVKHyperflash
    › STM32CubeProgrammer: https://www.st.com/en/development-tools/stm32cubeprog.html
    › STM32 ST-LINK Utility: https://www.st.com/en/development-tools/stsw-link004.html​​​​​​​

    Qt Creator设置 启用Qt Creator插件 选择“帮助>关于插件”,然后从列表中选择“MCU支持(实验性)”插件,重新启动Qt Creator以应用更改
    替代文字 为MCU创建Qt工具包

    选择工具>选项>设备>MCU

    选择Qt for MCUs-Desktop 32bpp作为目标

    如果尚未设置,请提供Qt for MCUs安装目录的路径。

    单击Apply应用。

    替代文字

    替代文字
    替代文字

    注意:

    编译器要选X64,Qt版本要选64bit,CMake Tool选x64

    打开恒温器项目demo

    选择文件>打开文件或项目。。。

    打开CMakefiles.txt文件来自thermo文件夹的文件。

    选择Qt作为MCU-桌面32bpp套件。

    单击“配置项目”以完成。

    替代文字

    问题

    开发主机环境支持仅限于Windows 10

    C++编译失败,文本大字体.pixelSize.

    文本类型无法正确呈现需要复杂文本布局的unicode序列。对复杂文本使用StaticText

    read more
  • H

    hi 有问题请教你,方便加个联系方式吗

    read more
  • boost.asio是一个很棒的网络库,这回儿我也开始系统地学习起来了。想想当年接触boost,也有八年多了。这次开始接触boost,觉得既熟悉又陌生。熟悉的是小写字母+下划线的命名方式、晦涩的模板、很慢的编译速度以及较大的程序体积,陌生的是asio的各种概念:io服务、接收器、套接字等等:我之前对网络编程不是非常了解。

    于是根据我的理解,参考《Boost.Asio C++网络编程》实现了这样一个简单的客户端和服务端通信的例子,例子非常简单,还不完善,但是幸运的是,可以在本机上互通了。
    下面是客户端的代码:

    #include <iostream> #include <boost/asio.hpp> #include <boost/proto/detail/ignore_unused.hpp> using namespace std; using namespace boost::asio; using namespace boost::system; using namespace boost::proto::detail;// 提供ignore_unused方法 void writeHandler( const boost::system::error_code& ec, size_t bytesTransferred ) { if ( ec ) { cout << "Write data error, code: " << ec.value( ) << "transferred: " << bytesTransferred << endl; } else { cout << "OK! " << bytesTransferred << "bytes written. " << endl; } } int main(int argc, char *argv[]) { ignore_unused( argc ); ignore_unused( argv ); io_service service; ip::tcp::socket sock( service ); ip::tcp::endpoint ep( ip::address::from_string( "127.0.0.1" ), 6545 ); boost::system::error_code ec; sock.connect( ep, ec ); if ( ec ) { cout << "Connect error, code: " << ec.value( ) << ", We will exit." << endl; return ec.value( ); } else { char buf[1024] = "Hello world!"; sock.async_write_some( buffer( buf ), writeHandler ); sock.close( ); } return service.run( ); }

    下面是服务端的代码:

    #include <iostream> #include <boost/asio.hpp> #include <boost/proto/detail/ignore_unused.hpp> using namespace std; using namespace boost::asio; using namespace boost::system; using namespace boost::proto::detail;// 提供ignore_unused方法 void acceptHandle( const boost::system::error_code& code ) { cout << "Accepted." << endl; } int main(int argc, char *argv[]) { ignore_unused( argc ); ignore_unused( argv ); io_service service; ip::tcp::endpoint ep( ip::address::from_string( "127.0.0.1" ), 6545 ); boost::system::error_code ec; ip::tcp::socket sock( service ); ip::tcp::acceptor acceptor( service, ep ); acceptor.async_accept( sock, acceptHandle ); if ( ec ) { cout << "There is an error in server. code: " << ec.value( ) << endl; } return service.run( );// 阻塞运行 }

    运行结果是这样的:
    78448d7b-b3ae-42fc-9e2e-4dd2fbdac2c2-image.png

    我对boost.asio中几个概念的理解:

    io_service,这就是一个类似事件循环的东西,它为io设备提供服务,故名。不管是套接字、文件还是串口设备,都要使用它的服务。它的run()函数相当于启动了一个事件循环。一旦有消息了,即进行响应。这也是实现异步编程的重要基础。 socket,这个类则是套接字,可以处理TCP或者是UDP请求。有同步以及异步的处理方式,也有带异常以及不带异常的处理方式。 acceptor,接收器,仅仅是服务端使用。相当于其余框架中的listener,作接收用的。

    比较浅显,如果有不当之处,敬请指正。

    read more

关注我们

微博
QQ群