<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="http://api.springnote.com">
  <identifier type="integer">501516</identifier>
  <title>02 &#52968;&#53944;&#47204; &#45796;&#47336;&#44592; - &#54620;&#51460; &#47568;&#54616;&#44592; &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;</title>
  <relation_is_part_of type="integer">501210</relation_is_part_of>
  <date_modified type="datetime">2007-09-30T05:46:23Z</date_modified>
  <uri>http://deepblue.springnote.com/pages/501516</uri>
  <date_created type="datetime">2007-09-29T09:03:44Z</date_created>
  <source>&lt;p&gt;&#51648;&#45212;&#44544;: &lt;a href="/pages/501349" title="01 &#53076;&#53076;&#50500;&#50752;&#51032; &#47564;&#45224; - &#45212;&#49688; &#49373;&#49457; &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;" class="wiki"&gt;01 &#53076;&#53076;&#50500;&#50752;&#51032; &#47564;&#45224; - &#45212;&#49688; &#49373;&#49457; &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;&lt;/a&gt; / &lt;a href="/pages/501210" class="wiki" title="&#47336;&#48708; &#53076;&#53076;&#50500; &#54532;&#47196;&#44536;&#47000;&#48141;"&gt;&#47336;&#48708; &#53076;&#53076;&#50500; &#54532;&#47196;&#44536;&#47000;&#48141;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&#51060;&#48264;&#50640;&#45716; &#52968;&#53944;&#47204;&#51012; &#49324;&#50857;&#54616;&#45716; &#44036;&#45800;&#54620; &#50696;&#51228;&#47196; &#52293;&#51032; 4&#51109;~5&#51109;&#50640;&#49436; &#49444;&#47749;&#54616;&#44256; &#51080;&#45796;. &#50500;&#50872;&#47131;&#44284; &#50529;&#49496;&#51012; &#51648;&#51221;&#54616;&#45716; &#48277;&#47564; &#50508;&#47732; &#49789;&#44172; &#46384;&#46972;&#54624; &#49688; &#51080;&#45716; &#50696;&#51228;&#50688;&#45796;.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;SpeakLine &#50696;&#51228;&lt;br /&gt;&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title="&#44536;&#47548;_11.png" class="attachment" src="/pages/501516/attachments/221030" alt="&#44536;&#47548;_11.png" /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;NSTextField&#51032; &#44050;&#51012; NSSpeechSynthesizer&#47484; &#51060;&#50857;&#54644; &#51069;&#50612;&#51452;&#45716; &#44036;&#45800;&#54620; &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;&#51060;&#45796;. &#50812;&#51901;&#51032; &#49353;&#49345; &#49440;&#53469;&#44592;(NSColorWell)&#51008; &#51060;&#50976;&#50630;&#51060; &#48537;&#50612; &#51080;&#45796; :)&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;&#46020;&#50864;&#48120; &#44061;&#52404;&#50752; &#45944;&#47532;&#44172;&#51060;&#53944;&lt;br /&gt;&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title="&#44536;&#47548;_12.png" class="attachment" src="/pages/501516/attachments/221031" alt="&#44536;&#47548;_12.png" /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&#53076;&#53076;&#50500; &#52968;&#53944;&#47204;&#44284; &#51221;&#48372;(&#44050;&#51060;&#46304; &#51060;&#48292;&#53944;&#46304;)&#47484; &#51452;&#44256; &#48155;&#45716; &#48169;&#49885;&#51008; &#45944;&#47532;&#44172;&#51060;&#49496;(Delegation)&#51060;&#45796;. &#45236;&#44032; &#45320;&#47484; &#50948;&#54620; &#47700;&#49436;&#46300;&#46308;&#51012; &#44396;&#54788;&#54616;&#44256; &#51080;&#51004;&#45768; &#54596;&#50836;&#54620; &#44592;&#45733;&#51060; &#51080;&#51004;&#47732; &#45208;&#54620;&#53580; &#50948;&#51076;&#54644;&#46972;&#44256; &#52968;&#53944;&#47204;&#50640; &#50836;&#52397;&#54616;&#45716; &#49885;&#51060;&#45796;. &#51068;&#44288;&#49457;&#51080;&#44256; &#44628;&#45140;&#54620; &#44396;&#54788;&#44057;&#45796;.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @speech_synth.setDelegate(self)&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&#51060; &#50696;&#51228;&#50640;&#49436;&#45716; &#45944;&#47532;&#44172;&#51060;&#53944;&#47484; &#49444;&#51221;&#54644; NSSpeechSynthesizer&#51032; &#51333;&#47308; &#51060;&#48292;&#53944;&#47484; &#52376;&#47532;&#54616;&#44256; TableView&#51032; DataSource &#50669;&#54624;&#51012; &#49688;&#54665;&#54616;&#44256;, &#46608; TableView&#51032; &#48320;&#44221; &#51060;&#48292;&#53944;&#46308;&#46020; &#52376;&#47532;&#54664;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&#52293;&#50640; &#48372;&#47732; &#45944;&#47532;&#52992;&#51060;&#53944;&#47484; &#44396;&#54788;&#54624; &#46412; &#48156;&#49373;&#54616;&#45716; &#51068;&#48152;&#51201;&#51064; &#50724;&#47448;&#47196; &#51060;&#47492;&#51012; &#51096;&#47803; &#51201;&#45716; &#44221;&#50864;&#50752; &#50500;&#50883;&#47131; &#51648;&#51221;&#51012; &#44148;&#45320;&#46832;&#45716; &#44163;&#51012; &#46308;&#44256; &#51080;&#45716;&#45936;, &#51687;&#51008; &#50696;&#51228;&#47484; &#47564;&#46308;&#47732;&#49436; &#46160; &#44032;&#51648; &#47784;&#46160; &#44202;&#44172; &#46104;&#50632;&#45796;. &#51061;&#49689;&#54644;&#51648;&#44592; &#51204;&#44620;&#51648;&#45716; &#49345;&#45817;&#55176; &#49888;&#44221;&#51012; &#50416;&#44256; &#51080;&#50612;&#50556;&#54624; &#44163; &#44057;&#45796;.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&#45796;&#51020;&#51008; &#52968;&#53944;&#47204;&#47084;&#51032; &#51204;&#52404; &#49548;&#49828; &#53076;&#46300;&#51060;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;require 'osx/cocoa'&lt;br /&gt;
&lt;br /&gt;
class AppController &amp;lt; OSX::NSObject&lt;br /&gt;
&amp;nbsp; ib_outlet :textField&lt;br /&gt;
&amp;nbsp; ib_outlet :colorWell&lt;br /&gt;
&amp;nbsp; ib_outlet :stopButton&lt;br /&gt;
&amp;nbsp; ib_outlet :tableView&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; ib_action :sayIt&lt;br /&gt;
&amp;nbsp; ib_action :stopIt&lt;br /&gt;
&amp;nbsp; ib_action :changeTextColor&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def initialize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSLog 'initialized'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @speech_synth = OSX::NSSpeechSynthesizer.alloc.initWithVoice(nil)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @speech_synth.setDelegate(self)&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def awakeFromNib&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSLog 'setting initial color for color well'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @colorWell.setColor(@textField.textColor)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; default_voice = available_voices.indexOfObject(OSX::NSSpeechSynthesizer.defaultVoice)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @tableView.selectRow_byExtendingSelection(default_voice, false)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @tableView.scrollRowToVisible(default_voice)&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; ########################################&lt;br /&gt;
&amp;nbsp; ## Actions&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def sayIt(sender)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; str = @textField.stringValue&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return if str.empty?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @speech_synth.startSpeakingString(str)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSLog "Have started to say: #{str}"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @stopButton.enabled =&amp;nbsp; true&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def stopIt(sender)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSLog "Stopping"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @speech_synth.stopSpeaking&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def changeTextColor(sender)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSLog "changing the color"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @textField.setTextColor(sender.color)&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; ########################################&lt;br /&gt;
&amp;nbsp; ## OSX::NSSpeechSynthesizer&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def speechSynthesizer_didFinishSpeaking(sender, finished)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSLog "finished: #{finished}"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @stopButton.enabled =&amp;nbsp; false&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def available_voices&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSSpeechSynthesizer.availableVoices&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; ########################################&lt;br /&gt;
&amp;nbsp; ## TableView&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def numberOfRowsInTableView(tableView)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; available_voices.count&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def tableView_objectValueForTableColumn_row(tableView, tableColumn, row)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; voice = available_voices.objectAtIndex(row)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSSpeechSynthesizer.attributesForVoice(voice).valueForKey(OSX::NSVoiceName)&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def tableViewSelectionDidChange(notification)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; row = @tableView.selectedRow&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return if row == -1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; selected = available_voices.objectAtIndex(row)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @speech_synth.voice = selected&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX::NSLog "new voice: #{selected}"&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def selectionShouldChangeInTableView(tableView)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return true unless @speech_synth.isSpeaking&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OSX.NSBeep&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; false&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&#51204;&#52404; &#49548;&#49828; &#54028;&#51068;: &lt;a href="/pages/501516/attachments/221033" title="SpeakLine.zip" class="attachment"&gt;SpeakLine.zip&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;&#54980;&#44592;&lt;/h3&gt;
&lt;p&gt;&#50500;&#51649; &#53076;&#53076;&#50500; &#54532;&#47112;&#51076;&#50892;&#53356;&#51032; &#47700;&#49884;&#51648;&#46308;&#51032; &#47749;&#47749; &#44508;&#52825;&#51012; &#51096; &#47784;&#47476;&#44192;&#45796;. &#51068;&#44288;&#49457; &#51080;&#45716; &#44163; &#44057;&#51004;&#47732;&#49436;&#46020; &#44272;&#44272;&#55176; &#52432;&#45796;&#48372;&#47732; &#47956;&#44032; &#50612;&#49353;&#54644;&#48372;&#51064;&#45796;. &#51061;&#49689;&#54616;&#51648; &#50506;&#50500;&#49436; &#51064;&#51648;, &#50896;&#47000; &#48373;&#51105;&#54620; &#44163;&#51064;&#51648; &#51096; &#47784;&#47476;&#44192;&#45796;. &#44536;&#47532;&#44256; &#47336;&#48708; &#53076;&#53076;&#50500;&#44032; Objective-C&#50640; &#48708;&#54644; &#53076;&#46377;&#47049;&#51008; &#54869;&#49892;&#55176; &#51201;&#51648;&#47564;, IDE&#51032; &#46020;&#50880;(&#53076;&#46300; &#49373;&#49457;)&#51012; &#47803; &#48155;&#44256; &#51080;&#50612;&#49436; &#52488;&#48372;&#51088;&#50640;&#44172;&#45716; &#50557;&#44036; &#50612;&#47140;&#50868; &#48512;&#48516;&#51060; &#51080;&#50612; &#48372;&#51064;&#45796;. &#45796;&#51020; &#48260;&#51204; XCode&#50640;&#49436;&#45716; &#47336;&#48708; &#51648;&#50896;&#46020; &#48372;&#44053;&#46112;&#44620;?&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&#45796;&#51020; &#50696;&#51228;&#45716; &lt;a href="/pages/502480" class="wiki" title="03 &#52828;&#54644;&#51648;&#44600; &#48148;&#47000; - &#51649;&#50896; &#44553;&#50668; &#44288;&#47532; &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;"&gt;03 &#52828;&#54644;&#51648;&#44600; &#48148;&#47000; - &#51649;&#50896; &#44553;&#50668; &#44288;&#47532; &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;&lt;/a&gt;. &#51060;&#51228; &#49436;&#49436;&#55176; &#48373;&#51105;&#54644;&#51652;&#45796;(&#51204;&#52404;&#48372;&#44592;: &lt;a href="/pages/501210" title="&#47336;&#48708; &#53076;&#53076;&#50500; &#54532;&#47196;&#44536;&#47000;&#48141;" class="wiki"&gt;&#47336;&#48708; &#53076;&#53076;&#50500; &#54532;&#47196;&#44536;&#47000;&#48141;&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
</source>
  <rights nil="true"></rights>
  <creator>deepblue</creator>
  <contributor_modified>deepblue</contributor_modified>
  <version type="integer">42</version>
  <tags>&#47336;&#48708;,&#53076;&#53076;&#50500;</tags>
</page>
