第一篇:实验二 语音交互设计-TTS
文本语音(Text-to-Speech,以下简称TTS),它的作用就是把通过TTS引擎把文本转化为语音输出。简单介绍如何运用Microsoft Speech SDK 建立自己的文本语音转换应用程序。Microsoft Speech SDK是微软提供的软件开发包,提供的Speech API(SAPI)主要包含两大方面:
1.API for Text-to-Speech:微软TTS引擎的接口,通过它我们可以很容易地建立功能强大的文本语音程序 ;
2.API for Speech Recognition:与TTS相对应的语音识别
为了在VC中使用这SDK,必需在工程中添加SDK的include和lib目录,为免每个工程都添加目录,最好的办法是在VC的Option->Directoris加上SDK的include和lib目录。
一、TTS—基于控制台
这是一个基于控制台的语音程序示例。这个例子中,使用了最简单的COM框架,并让计算机“说”一句简单的话。同时介绍了如何使用XML标签来对语音进行修改。主要包括如下步骤:--Step1:建立工程项目--Step2:初始化COM接口--Step3:创建语音对象--Step4:开始说话
--Step5:用XML标签修改语音
1、Step1:建立工程
(1)利用Visual Studio的开发环境中的应用程序向导建立一个Win32控制台(console)程序。在创建过程中时,选择一个简单的“Hello world”应用程序工程项目。
(2)创建完成后,打开“stdafx.h”头文件,把以下的内容粘贴在“#include
#define _ATL_APARTMENT_THREADED #include
(4)再设置sapi.lib的路径。在同样的“Settints”对话框中,选择“Link”标签页;在“Category”下拉列表中选择“Input”;在“Additional library path”编辑框中填入sapi.lib的路径:“F:Program FilesMicrosoft Speech SDK 5.1Libi386 ;
(5)在同样的“Link”标签页中的“Object/library modules”栏中增加“sapi.lib”,注意,这里的各个库名字之间用空格隔开。
Step2:初始化COM接口
SAPI 是基于COM框架的,所以使用SAPI相关函数之前和SAPI对象被激活时,程序必须初始化COM接口。下面的代码虽然除了初始化之外没有任何其它的功能,但是它确保COM能被正常启动。程序清单2:
#include
::CoUninitialize();return TRUE;} Step3:创建语音对象
COM 运行环境建立起来之后,接下来创建语音对象。语音对象是一个简单的COM对象。另外,语音对象使用很多智能的默认配置,在自身初始化过程中,SAPI自动为其配置大多数的默认值,语音对象创建完成后就可以立即被程序使用。这些默认的参数是从“控制面板”的“语言属性”中获得的,包括语言种类等。所有的默认参数,包括显见的和非显见的(比如说话速度,基音周期等),都可以用编程的方式改变,或从控制面板中的语言属性中修改。
#include
if(FAILED(::CoInitialize(NULL)))return FALSE;HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice,(void **)&pVoice);if(SUCCEEDED(hr)){ pVoice->Release();pVoice = NULL;// pVoice设置为NULL空值不是必须的,但这样做有助于检查错误,也可以作为一个提示,表示这个指针的空间已经分配了或者被释放了。} ::CoUninitialize();return TRUE;} 注:SDK提供的是基于COM封装的,只要按部就班地用CoInitialize()、CoCreateInstance()获取IspVoice接口就够了,需要注意的是初始化COM后,程序结束前一定要用CoUninitialize()释放资源。
SAPIStep4:开始说话
上述程序的流程是获取IspVoice接口,然后用ISpVoice::Speak()把文本输出为语音,只需调用“Speak”函数即可。
HRESULT Speak(const WCHAR *pwcs,DWORD dwFlags,ULONG *pulStreamNumber);
(1)*pwcs 输入的文本字符串,必需为Unicode,如果是ansi字符串必需先转换为Unicode.(2)dwFlags 用来标志Speak的方式,其中SPF_IS_XML 表示输入文本含有XML标签。
(3)PulStreamNumber 输出,用来获取去当前文本输入的等候播放队列的位置,只有在异步模式才有用。代码如下: #include
TTS API功能最强大之处在于能够分析XML标签,通过XML标签设置音量、音调、延长、停顿,几乎可以使输出达到自然语音效果。前面已经提过,把Speak参数dwFlags设为SPF_IS_XML,TTS引擎就会分析XML文本,输入文本并不需要严格遵守W3C的标准,只要含有XML标签就行了,在下面的例子中,后部分的语音基音频率会比前部分的低10个等级。
#include but the pitch drops half way through”, SPF_IS_XML, NULL);pVoice->Release();pVoice = NULL;} ::CoUninitialize();return TRUE;} COM:即组件对象模型,Component Object Model。 1、在COM构架下,人们可以开发出各种各样的功能专一的组件,组件实际上是一些小的二进制可执行程序,它们可以给应用程序、操作系统以及其他组件提供服务,然后将它们按照需要组合起来,构成复杂的应用系统(如dll)。优点:可用新组件替换原有组件,系统升级和定制更加简便;可在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言、平台无关,程序员可充分发挥自己的才智与专长编写组件模块等。 2、使用和处理COM对象。COM独立于语言,COM为自己提供对象管理例程。COM中创建对象,实际是调用COM库中的API函数CoCreatInstance().调用该函数时,在注册表中查找COM服务器位置,将服务器加载到内存,并创建所请求的实例。 3、一般使用COM对象的步骤是: 初始化COM库(Initialize); 创建一个COM对象,获得相应接口; 如果对象创建成功,则调用COM对象的某个方法; 释放接口; 收回COM库(Uninitialize) 二、TTS—基于图形界面 基于图形用户界面创建一个TTS应用程序,通过对菜单命令的选择执行文本-语音的转换。 一、建立项目 1、创建一个实现典型“Hello world”应用的windows 32平台应用程序项目。 二、设置sapi路径:与SAPI相关的文件路径必须在项目中声明。(sapi.h和sapi.lib) 1、选择“Tools”→ “Options”→“Directories”选项卡; 2、选择“Include Files”下拉式选单,增加“sapi.h”的文件路径; 3、选择“Library Files”下拉式选单,增加“sapi.lib”的文件路径; 三、创建“Speak”菜单命令 1、修改自动生成的菜单项。打开“资源管理器”→“File”菜单→增加“Speak”命令项→资源ID设置为“IDM_SPEAK”。 四、实现speak功能 第1步:初始化COM 第2步:创建语音对象设置声音 第3步:调用speak函数 第4步:设置感兴趣的事件 第5步:确定事件类型 第6步:响应事件 1、初始化COM if(FAILED(CoInitialize(NULL))) { return FALSE; } 2、创建语音对象设置声音 一旦com运行后,下一步就是要创建语音对象。这里需要用到CoCreatInstance().为简洁和方便起见,这个例子使用了特别的处理方式。首先,它使用initinstance()来初始化声音。这是最简单的初始化过程。第二,这个语音对象是全局性的。第三,语音对象建立之后,对象本省和用到的内存立即被释放。最后,如果初始化失败,应用程序应该有更强有力的检查错误机,更广泛的报告和更详细的资料。 程序清单2: ISpVoice *pVoice;//SAPI voice(初始化模块)…… BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){。。。 // Instead of using IDC_TEST, use the identifier of menu resource of the current application.SetMenu(hWnd, LoadMenu(hInstance, MAKEINTRESOURCE(IDC_TEST)));ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);//Initialize SAPI HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice,(void **)&pVoice); if(SUCCEEDED(hr)) { pVoice->SetInterest(SPFEI(SPEI_WORD_BOUNDARY),SPFEI(SPEI_WORD_BOUNDARY)); pVoice->SetNotifyWindowMessage(hWnd, WM_USER, 0, 0); } else return FALSE; 3、调用Speak函数实现“讲话”的功能 要让计算机讲话只需一句简单的调用命令,要讲话的内容用一个参数传给语音对象,常是从一个对话框或一个文件获取字符串的。另外,字符串也可以从一个流中获取,但就要使用另外一个调用 ispvoice:: speakstream。Speak函数的调用代码是放在windows的消息处理函数wndproc()相应的消息处理中的。从文件菜单选择Speak命令,计算机将开始讲: “我很高兴发言。” 程序代码3: // FUNCTION: WndProc(HWND, unsigned, WORD, LONG)。。。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ 。。。WCHAR tempString[30]。。。 switch(wmId){。。。case IDM_SPEAK: wcscpy(theString, L“I am glad to speak.”); pVoice->Speak(theString, SPF_ASYNC, NULL); pVoice->Speak(L“I am glad to speak”, SPF_ASYNC, NULL); break; default: return DefWindowProc(hWnd, message, wParam, lParam);} 4、设置事件 像其它大部分windows应用程序一样,在COM组件中有很多交互动作,这些交互信息将以信息形式出现。sapi是也一样。信息是在TTS或SR引擎中产生的,某个特定的事件也是在那里开始和结束的.很多时候, sapi或sapi的引擎产生的事件是对应用程序有用的。举例来说,当一个识别过程开始的时候,应用程序会得到相应的通知或消息,最终的用户也可以得到相应的通知。 (1)首先,需要接收一个来自sapi的或sapi的引擎的消息。这个消息是程序自定义的.但是,所有的活动sapi都使用相同的消息通知应用程序; (2)得到通知后,应用程序要检查一个事件结构,这个事件结构是由SAPI完成的.利用这个结构来确定具体是发生了什么事件(见第五步骤).(3)设定感兴趣的事件。程序可以用setinterest 来设置感兴趣的事件。默认情况下,TTS不向程序发出任何事件通知。也就是说,如果程序忽略了setinterest的调用,TTS应用程序是得不到任何事件通知的。 (4)设定消息。不论以何种事件,应用程序都应该将一个消息与sapi联系起来。程序通过调用setnotifywindowmessage来完成这个任务,本例使用WM_USER消息。 程序清单4: //Initialize SAPI HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice,(void **)&pVoice);if(SUCCEEDED(hr)){ pVoice->SetInterest(SPFEI(SPEI_WORD_BOUNDARY),SPFEI(SPEI_WORD_BOUNDARY)); pVoice->SetNotifyWindowMessage(hWnd, WM_USER, 0, 0); } else return FALSE; 5、确定事件。使用事件来工作需要2个步骤。 (1)首先是使用一个简单和标准的做法设置和使用Windows消息。消息是被发送到程序的消息环中的。在这个例子里,wndproc()接收wm_user讯息。一旦讯息是捕获,其余事情由sapi函数来完成。 (2)第二个步骤是确定哪些消息发生了。Sapi使用 spevent和getevents方法来确定具体的事件和消息。通过这两个函数可以获取指定的事件信息和事件类型。在SPEVENT的成员eeventid恰恰是setinterest所设定的值。该spevent结构必须在首次使用时被初始化。而且重新使用之前也要被清除。可以使用spclearevent来完成清除工作。 程序清单5: switch(message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); 。。。 case WM_USER: //处理speak命令的窗口 SPEVENT eventItem; memset(&eventItem, 0,sizeof(SPEVENT)); while(pVoice->GetEvents(1, &eventItem, NULL)== S_OK) { switch(eventItem.eEventId) { case SPEI_WORD_BOUNDARY : SPVOICESTATUS eventStatus; pVoice->GetStatus(&eventStatus, NULL); ULONG start, end; start = eventStatus.ulInputWordPos; end = eventStatus.ulInputWordLen; wcsncpy(tempString, theString + start , end); tempString[ end ] = '/0'; //MessageBoxW(hWnd, tempString, L“GUIApp”, MB_OK|MB_ICONWARNING); MessageBoxW(hWnd, tempString, L“SayApp”, MB_OK|MB_ICONWARNING); break; default: break; } SpClearEvent(&eventItem); } break。。。case WM_DESTROY: if(pVoice) { pVoice->Release(); pVoice = NULL; } PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } 6、响应事件。在这个例子中,应用程序使用spei_word_boundary消息来取定每一个单词。可以用getstatus函数和spvoicestatus结构来获取更详细的信息。一个独立的单词,可以用事件发生时的第一个字母和最后一个字母的位置来确定。在这个例子中,使用MessageBoxW来显示所讲的单词。在说话过程中,屏幕是实时更新的,并显示实际发言的文字。这个特点是由spf_async标志控制的。如果在Speak函数中使用NULL参数,而不是SPF_ASYNC参数,那样就要等整句话说完之后,才显示消息框。pVoice->Speak(theString, SPF_ASYNC, NULL); //释放语音对象 程序代码6: case SPEI_WORD_BOUNDARY : SPVOICESTATUS eventStatus; pVoice->GetStatus(&eventStatus, NULL); ULONG start, end; start = eventStatus.ulInputWordPos; end = eventStatus.ulInputWordLen; wcsncpy(tempString, theString + start , end); tempString[ end ] = '/0';MessageBoxW(hWnd, tempString, L“GUIApp”, MB_OK|MB_ICONWARNING);break;总结: 最后,总结一下这个例子的主要知识点: 1,初始化COM: CoInitialize和CoUninitialize 2,建立语音对象实例:CoCreateInstance 3,讲话:Speak 4,设置感兴趣的事件:SetInterest 设定SAPI返回的消息 :setnotifywindowmessage 5,消息来时,确定事件类型:GetEvents 清除事件结构:SpClearEvent 6,响应事件时,用GetStatus确定当前SAPI的状态 实验一语音信号分析与处理 学号姓名注:1)此次实验作为《数字信号处理》课程实验成绩的重要依据,请同学们认真、独立完成,不得抄袭。 2)请在授课教师规定的时间内完成; 3)完成作业后,请以word格式保存,文件名为:学号+姓名 4)请通读全文,依据第2及第3 两部分内容,认真填写第4部分所需的实验数据,并给出程序内容。 1.实验目的(1)学会MATLAB的使用,掌握MATLAB的程序设计方法 (2)掌握在windows环境下语音信号采集的方法 (3)掌握MATLAB设计FIR和IIR滤波器的方法及应用 (4)学会用MATLAB对语音信号的分析与处理方法 2.实验内容 录制一段自己的语音信号,对录制的语音信号进行采样,画出采样后语音信号的时域波形和频谱图,确定语音信号的频带范围;使用MATLAB产生白噪声信号模拟语音信号在处理过程中的加性噪声并与语音信号进行叠加,画出受污染语音信号的时域波形和频谱图;采用双线性法设计出IIR滤波器和窗函数法设计出FIR滤波器,画出滤波器的频响特性图;用自己设计的这两种滤波器分别对受污染的语音信号进行滤波,画出滤波后语音信号的时域波形和频谱图;对滤波前后的语音信号进行时域波形和频谱图的对比,分析信号的变化;回放语音信号,感觉与原始语音的不同。 3.实验步骤 1)语音信号的采集与回放 利用windous下的录音机或其他软件录制一段自己的语音(规定:语音内容为自己的名字,以wav格式保存,如wql.wav),时间控制再2秒之内,利用MATLAB提供的函数wavread对语音信号进行采样,提供sound函数对语音信号进行回放。 [y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率nbits表示采样位数。Wavread的更多用法请使用help命令自行查询。 2)语音信号的频谱分析 利用fft函数对信号进行频谱分析 3)受白噪声干扰的语音信号的产生与频谱分析 ①白噪声的产生: N1=sqrt(方差值)×randn(语音数据长度,2)(其中2表示2列,是由于双声道的原因)然后根据语音信号的频谱范围让白噪声信号通过一个带通滤波器得到一个带限的白噪声信号N2; 带通滤波器的冲激响应为: hB(n)=c2 sinc(c2 (n))c1 sinc(c1 (n))其中ωc1为通带滤波器的下截止频率,ωc2为通带滤波器的上截止频率。其中下截止频率由每个人的语音信号的最高频率确定 滤波器的长度N由滤波器的过渡带确定,一般不宜太小(大于1000),α=(N-1)/2; ②信号y通过低通滤波器,得到信号为x1 低通滤波器的冲激响应为: hL(n)c1sinc(c1 (n))其中的ωc1与上面的带通滤波器的下截止频率一致,滤波器的长度N也于上面的带通滤波器一致,α=(N-1)/2 ③将N1加上x1得到一个受到噪声污染的声音信号 4)据语音信号的频带情况,设计FIR和IIR两种滤波器 5)用滤波器对受污染语音信号进行滤波 FIR滤波器fftfilt函数对信号进行滤波,IIR滤波器用filter函数对信号进行滤波 6)比较滤波前后信号的波形与频谱 7)回放滤波后的语音信号 4.实验数据及实验程序 实验数据 1)原始语音信号的时域波形和频谱图及语音信号的频带范围 2)带限白噪声信号的时域波形和幅频特性 3)受污染语音信号的时域波形和幅频谱图 4)滤波器的频响特性图 FIR滤波器的幅频响特性图 IIR滤波器的幅频响特性图 5)滤波后语音信号的时域波形和频谱图 6)滤波前后的语音信号时域波形对比图和幅频谱对比图 7)将实验的资料的电子文档交给班长(建立一个文件夹,里面包括:①实验报告的电子版;②采集的语音信号电子文件;③受污染的语音信号及滤波后的语音信号存在文件名为“姓名+学号.mat”文件的文件中) 实验程序: 1)实验主程序 2)FIR滤波器子程序 3)IIR滤波器子程序 交互设计心得整理 长期以来我就有对几年来交互设计的心得进行总结整理的想法。回到中国来亲身体会到不少同行,主要是交互设计师和视觉设计师对于交互设计的困惑,以及其他行业对于交互设计的误解和滥用。后来我在小范围内开设了一个关于交互设计的讲座;现在把它整理成文,希望与同行切磋,共同进步。 这篇文章是我几年来在美国从事交互设计工作的一个经验总结。当时我们遵循以用户为中心(User-Centered-Design, 简称UCD)的设计原则,每一个项目都是不折不扣的按所有UCD的步骤进行。下面总结的交互设计的方法,是从UCD的过程中提炼出来,也就是说,同样适用于任何非UCD的设计过程。交互设计的流程 如果一提到交互设计,你就想到画线框图或原型图,那你只对了五分之一。交互设计是一个过程,从开始到结束有一套系统的流程。原型图只是其中的一个环节。 当接到一个设计项目,怎么开始?都应该做哪些工作?怎样尽可能的保证交付物满足既定的功能以及用户体验层面的易用性? 第一步,是任务分析,列出界面所要完成的所有任务。第二步按各任务确定页面流程,建立信息架构。接下来是创建统一的页面布局包括分区等。然后在页面布局的基础上进行原型设计,可以是低保真和高保真的原型图。最后编写设计说明。下面以设计一款动感相册界面为例,逐步讲解各个环节。1.任务分析 第一步任务分析。这里要做的是对于将要设计的这个新界面的所有任务的分析,也就是用户在界面上能进行的所有操作。这个分析在功能需求的基础上进行,需求方一般提供一个功能点的列表。 任务分析最常见的是任务列表,另外有任务流程和任务场景等。下面以任务列表为例。列出所有主要任务,以及每个主要任务的子任务。再把子任务细分到各个步骤。形成下面这个列表。主要任务1 子任务1 步骤1 步骤2 子任务2 步骤1 步骤2 主要任务2 … 以动感相册为例,任务分析列表如下: 1.浏览相册 1)浏览相册列表 2)选择相册 3)浏览照片 2.创建新相册 1)添加照片 a)选择已有相册 b)选择照片 c)排列顺序 d)添加字幕文字 e)选择动画效果 2)添加模板 a)浏览模板 b)选择模板 3)添加音乐 a)浏览音乐列表 I.试听音乐 II.选择音乐 b)增加新音乐 I.打开本地文件 II.选择音乐 4)预览(略)… 5)命名(略)… 6)保存(略)… 3.修改相册(略)… 任务列表包括所有功能点,并对每一个功能点的逻辑关系进行整合。必要时会对各任务的使用频率和其它影响设计的重要因素进行分析,这里不做解释了。2.页面流程 任务分析完成后,进入设计的第一步,即设计页面流程。页面流程是设计的开始,也是重要的一环。它决定整个界面的信息架构和操作逻辑。页面流程是上一步任务分析的自然转化。一般来说,一个主要任务就是一个页面,其它子任务也可以转化为页面。 以动感相册为例,页面流程如下: 页面几乎是把任务分析照搬过来了。所以上一步做好了,这一步很轻松,而且越往后越轻松。注意这个流程图应该包括所有将要设计的新页面,一个不少,一个不多。它不仅确定页面内容,页面数量,还确定各页面之间的关系。如果在后来设计具体页面原型时,发现这个流程图多了或少了页面,或者页面关系发生了变化,说明你的功夫不到家(这个比较难,我一般不苛求我们的设计师)。根据原型图来创建或者修改页面流程图,不是在做设计,而是在写设计说明。3.页面布局 第三步页面布局是具体页面设计的开始,在上一步知道有哪些页面需要进行设计后,这里对页面进行划分,对内容进行组织。最重要的一点是确定页面分区。以动感相册为例,页面布局如下: 总布局,即通用布局,适合所有页面。 具体页面布局,在不与总布局冲突的情况下,有更细节的布局。 页面布局赋予零碎的内容以逻辑性,以分区的形式把页面各区域所对应的功能区确定下来,减少具体设计时的随意性。这是设计严谨与否的表现所在。把类似的操作放在一起,对于用户来说是可以预见的,用户能够判断哪个操作在哪个区域,减少盲目寻找带来的困难和疑惑。4.原型设计 这一步是大家熟知的,即具体页面的设计。这一步设计把所有的界面元素表现出来。可以有低保真和高保真原型图。低保真即是线框图,高保真多是接近最终效果图。下面是动感相册的低保真原型图。 5.设计说明 最后一步需要做的是对所有页面进行详细的描述,包括对页面上所有元素进行说明,比如默认状态,跳转页面,字号字体,尺寸等。这里就不解释了。这是交给开发人员的文档,以及测试人员进行测试的依据。小结 交互设计是一个过程,它不仅仅是画线框图。交互设计最关键的两个环节是页面流程和页面布局,前者建立清晰的架构和严密的逻辑,后者整合零散的信息并确定分明的主次关系。这一切都是为了我们的终极目标——让我们的界面符合用户的预期,不带给他们任何的意外。一切都在用户的意料之中。 交互设计师的基本素质 首先,谈谈我个人对交互设计师基本素质的看法。从我个人的理解来看,可以简单归纳为九字诀:“听、看、想、说、磨、做、验、写、讲”(如图1.1)。 图1.1 1)听:做一个交互设计师,最重要的一点就是要懂得倾听(这里蕴藏了一个隐晦的性格属性:谦虚!)。通常情况下,我们不是用户,所以很难 100%代表用户,更左右不了老板,所以我们首先要有听的本事,把来自用户的、老板的、PD的、视觉的、前端的、开发的、测试的、市场的、业界的等各方面的声音都听过来,听进去。 2)看:99%的情况下,交互不是一蹴而就的创造工作,它是站在前人肩膀上不断迭代更新的行为过程。我这里指的“看”是要求设计师能博览、能泛猎,看到好的,见过差的,什么都略懂,交互才能变得很美„„ 3)想:交互是思考的输出产物和表现形式。当设计师将之前听到的和看到的内容在头脑中加以整理、分析,经过发散的创造性碰撞和严谨的逻辑论证后,逐渐得到了相对靠谱的交互产物。这个思索分析的过程贯穿于交互设计工作流程的每个环节。 4)说:一个能说会道的人不一定是一个优秀的交互设计师,但一个优秀的交互设计师必然是一个善于准确表达自己想法和观点的人。在这一点上,我坚持交互是一门分享的学科,需要的是开放的性格和良好的沟通技巧。 5)磨:耐心、技巧、热情的综合表现。在一个项目的进程中,不可避免的会面临很多的挑战,优秀的交互设计师善于发挥“磨”的精神,他们怀揣对交互专业的无比热情,以无所不用其极的技巧,耐心的缠死一个又一个质疑方,最终让大家认同并帮助推动设计的实现。通常来说,一个优秀的交互设计师会是一个优秀的Idea推销员。 6)做:交互设计师专业度的核心表现。俗语说得好,是骡子是马,牵出来遛遛。对于交互设计师来说,之前的环节做得再好、再完美,也只是停留在设计师自己的脑子里,游荡于听众们的耳膜间。如果理论落实不到实际,那所有的想法都只是空中楼阁,你之前所有的努力都只是在佐证你的空泛和不切实际。所以我们不仅要能 “做”,更要“做”得漂亮,“做”得完美!我一直都是这样认为:“做”决定了一个交互设计师是不是靠谱,决定了一个交互设计师的高度,是一个交互设计师最根本的专业素质。 7)验:用户体验设计,最终是要落实到用户的身上的。客观中立的验证、分析、评估能力是一个优秀交互设计师的重要素质。无论个人还是团队,设计的成果都需要通过精准的测试才能算得上合乎标准,此时,一颗平常心和一双敏锐的眼睛是设计师最需要的。 8)写:分析、归纳和总结能力的综合表现。一个项目,无论成功还是失败,总是有很多地方值得设计师本人或后来人借鉴。交互设计之路不是一座苛求零失误的独木桥,但绝对是一条要求零“重复”失误的单行线。评价一个设计师的专业度,很重要的一环就是看他能不能多犯前人从来没有犯过的错误,并能有效总结给后来人。于是,他就成了大家,路就这样被趟了出来„„ 9)讲:演讲能力。这里所指的是在项目后期进行的交流分享。一个专业的交互设计师会站在宏观的高度上,以平和的心态同他人沟通,验证自己先前设计的合理性、全面性和科学性,更好的提高自己的专业能力,为今后的交互设计做好准备。 ·交互专业度的具象化表现 刚才讲了很多,但总体来说还是偏理论,还是让人摸不着头脑,虚幻的概念最大的优势在于它的颠簸不破和四平八稳,谁也揪不住它的小辫子。但这不是我的风格,更不是我写这篇文章的初衷,我希望的是抛砖引玉,给大家带来一些真正意义上能直接使用的东西。所以,接下来,我们来些“干货”,玩点简单粗暴的„„ 图1.2 根据阿里巴巴目前的产品开发流程(如图1.2),交互设计是大环节中的一个小点,抛开杂乱的干扰信息,单纯考量交互设计师在过程中的参与度,我们就能得到一个理想化的交互设计行为流(如图1.3): 图1.3 流程没什么好讲的,更没什么好争辩的,无非也就是增加一个、减少一个、偷换概念、细分归纳之类的忽悠。我这里想和大家分享的是流程中每个环节的专业输出物,我有一个激进的想法:如果某人能精准的完成某些公认的标准化输出物,那他99%可以被称为是一个“专业”的75分交互设计师了,剩下的 1%,也许是拼RP„„ 这里,我先简单交代一下即将涉及到的流程节点、对应输出物的图形色块的代表含义。 1)流程环节说明(如图1.4): 图1.4 2)流程环节各输出物说明(如图1.5): 图1.5 在我看来,一个专业的交互设计师,在一个理想化产品设计的过程中,有一些是属于必须的输出物,有一些属于最好有(推荐)的输出物,还有一些属于可有可无的输出物。同时,根据项目的实际情况和参与角色的分工情况,存在一些交互设计师可能需要负责的输出物,具体细节我将在下面逐一介绍。1)需求获取阶段: 此阶段通常来说会由PD等外部资源发起,输出物主要是FRD文档和时间计划文档,用以描述问题、提出初步目标,假想可能的解决方案、预估资源并梳理时间计划等。当然,对于从UED内部发起的项目,这两部分的输出也可以由交互设计师完成,属于可能责任输出物; 2)需求分析阶段: 历史数据的关注和分析阶段,基于项目本身,要针对竞争对手、行业现状等做详尽的收集和分析,其中的关键考核点是要做必要的头脑风暴,获取发散而全面的信息集合。在此阶段,竞争分析报告和头脑风暴输出物是交互设计师专业度的重要表现。 3)用户访谈阶段: 对于一些条件允许的项目,我们建议能在项目初期寻求一些用户的信息,定义一些用户的属性,这些对于之后的交互设计都会是坚实的基础。一个高专业度的交互设计师甚至会主动介入访谈问卷的设定工作,客观的参与调研报告输出的全过程。 4)需求修正阶段: 专业的交互设计师通常不甘于沦为一个纯粹的资源,抗拒被动的接受命令。我们之前经历的需求分析和用户访谈都是为掌控主动权而做的准备。如今,我们有理有据,应该主动出击,和需求方讨论研究需求的合理性、可行性,明确最终的修正目标,并对达成目标所涉及的重点突破点有理性的分析判断,筛选出各设计点的优先级。5)设计草稿阶段 项目目标和设计方向确定下来后,我们将进入核心的设计环节。作为交互设计师的“杀手锏”,交互流程和线框草图当然一个都不能少,但此时我更想强调一项辅助性质的调研分析工作。从交互的角度来看,在大流程大框架敲定的情况下,交互设计师通常会投入更多的精力在一些核心的设计点,也就是我们在需求修正阶段确认的设计重点。此时,专业的设计师绝对不会拍脑袋设计,更不会想当然出方案,而是会针对这些核心点做业界调研和分析,为自己即将进行的设计寻求一个足够宽广厚实的肩膀。6)设计细化阶段 第一阶段的设计工作将在此阶段性输出。我们回顾一下,截止此时的设计产物有:用户调研报告、FRD确认文档、交互流程、线框草图、核心设计调研分析、核心设计详细说明、交互流程整体说明等。基本上,一个交互设计师的专业度,已经可以根据此时的输出物数量、质量看出个大概齐了 7)专家评审阶段 一个专业的交互设计师,要谦虚。此刻,我们进入小范围专家评审的阶段了,三个臭皮匠还顶一个诸葛亮呢,更何况是参与评审的专家呢。此时设计师的专业度就体现在 “听”、“说”和“想”这三诀上,耐心的做好评审记录,有理有据的同专家们进行专业沟通,并确认最终的结论和方向。8)设计优化阶段 经历了专家团的考验,又该抖擞精神重新上路了,没什么好说的,把过程做好了,你的专业度也就到位了。设计优化阶段的投入度和产出将直接影响到后续Demo及测试的效果,和最终设计也息息相关,各位交互设计师们,千万别打瞌睡了! 9)仿真Demo开发阶段 终于到了仿真Demo的模型化阶段啦,这时尽管并没有直接的交互输出物,但还是需要交互设计师用百分百的挑刺精神,协助视觉和前端精准的达成我们之前的设计,严格保证最佳的输出效果。10)测试验证阶段 仿真Demo出来之后,将进入最后的测试验证阶段,根据项目的实际情况,可能是QA测试,也可能是用户测试,总之,这个环节能帮助设计师最后把关设计的合理性,专业如你,一定要亲自跟进测试并给出最终的评估报告,哪些点是前期没有考虑周全的?那些点是成功的?哪些点是必须立即改进的?哪些点能以后再说?哪些„„ 11)完成设计阶段 最后的设计阶段,根据之前的测试验证评估报告,交互设计师要对所有之前的输出做一次严格的检查和修正,完成最后的输出。 12)开发上线阶段 盯紧视觉设计师和前端工程师吧,最关键的时候终于到了,经历了那么多纷繁复杂的环节,我们等的就是上线的这一瞬间。当然,千万别忘了后续的跟踪和分析,这能为你的专业度加分不少哦 ·总结和展望 综上所述,我们已经整理出来了体现交互设计师专业度的过程输出物了,总结一下:以75分交互设计师的标准来看,我们的专业度能通过以下的关键输出物衡量:FRD目标确认文档、竞争分析报告、头脑风暴产出物、项目初期用户调研报告、核心设计点调研及分析报告、专家评审报告和评估报告、原型测试报告、交互流程图及详细说明文档、页面线框图、核心设计点说明文档和最后的跟踪分析报告。 基本上,所有的输出物都是反复易稿的结果,都是细碎过程的迭代输出,都饱含了设计师辛勤的工作投入。所有有梦想的交互设计师们,请正确的审视这些输出物,珍惜自己的付出,它们不光是单板的形式教条,它们更是证明自己专业度最有利的武器! 被很多同学都质疑过:那么多的输出物,平时做需求怎么可能全部做出来?每当此时,我的回答都是一样的:“是的,找借口总是很容易的。大家的确都很忙碌,按季度来说,基本上每个人都会经手大大小小几十个需求,但我们真的忙碌到输出一个高质量设计的精力都没有了吗?还是我们打心里就本着做交互、混日子的想法呢?” 不是不能,是不愿!那才是交互设计这个职业最可悲之处„„ 作者信息:本文http://第二篇:实验二 语音交互设计TTS-基于图形用户界面
第三篇:实验二语音信号分析与处理2010
第四篇:交互设计心得整理
第五篇:交互设计档案